template<typename T, typename U>
class Conversion
{
typedef char Small;
class Big{char dummy[2];};
static Small Test(U) { }
static Big Test(...) { }
static T MakeT() { }
public:
enum { exists = sizeof(Test(MakeT())) == sizeof(Small)};
};
如果T可以转换为U 于是就调用Test(U)这个函数 返回一个char;
如果不能 就调用使用(...)缺省参数的函数 返回一个数组
然后对返回值进行判断....