//////////////////////////////////////////////////////////
// //
// 测试 BORLAND C++ 5.5 和 VC6.0 对函数模板的支持程度 //
// 张晓辉 2002.12.15 //
// email: cowknife@163.com //
// 欢迎网络转载,但不得修改或删除本声明 //
// //
//////////////////////////////////////////////////////////
#include<iostream>
#include<complex>
using namespace std;
template <class T>
T min(const T &a, const T &b)
{
cout<<endl<<a<<" TEMPLATE "<<b<<endl;//注1:这一句在BORLAND C++ 5.5中没有执行.
if(a < b)
return a;
else
return b;
}
long min(const long &a, const long &b)
{
cout<<endl<<a<<" LONG "<<b<<endl;
if(a < b)
return a;
else
return b;
}
double min(const double &a, const double &b)
{
cout<<endl<<a<<" DOUBLE "<<b<<endl;
if(a < b)
return a;
else
return b;
}
int main()
{
cout<<endl<<min(2,3)<<' '<<min(4,5L)<<' '<<min(1.2,2)<<' '<<min(1.1f,2.2f)<<' '<<endl;//注2:这一句在VC6.0中不能通过.
cout<<endl<<min(2,3)<<' '<<min(4L,5L)<<' '<<min(1.2,2.3)<<endl;
return 0;
}
/*
测试结果:
1.本程序在 BORLAND C++ 5.5 中顺利通过, 证明 BORLAND C++ 5.5 对函数模板的支持是符合 C++ STANDARD 的.
2.本程序在 VC6.0 中没有通过, 主要是由于(注2)这条语句中 min(4,5L) 和 min(1.2,2) 没有被正确的解析. 将(注2)这条语句去掉后, 程序顺利通过.
3.BORLAND C++ 5.5 在对函数模板展开后好像并没有执行(注1)这条语句, 而 VC6.0 却确执行了这一句, 对于这一点我反复研究都没有搞明白, 给我发email探讨这个问题.
附一:
程序在 BORLAND C++ 5.5 中编译后执行结果如下(tempfun1.exe):
1.2 DOUBLE 2
4 LONG 5
2 4 1.2 1.1 (2,2)
1.2 DOUBLE 2.3
4 LONG 5
2 4 1.2
将(注2)这条语句去掉后,程序在 VC6.0 中编译后执行结果如下(tempfun2.exe):
1.2 DOUBLE 2.3
4 LONG 5
2 TEMPLATE 3
2 4 1.2
*/