奇怪的编译问题, 高分
1.
namespace __inner
{
template<typename _T> char fun(_T*);
template<typename _T> long fun(...);
}
template<typename _Base, typename _Sub>
struct is_same_type
{
enum{value = sizeof(char) == sizeof(__inner::fun<_Base>((_Sub*)0)) };
};
class ISupportInitialize
{
public:
virtual void Initialize() = 0;
};
class Foo: public ISupportInitialize
{
public:
virtual void Initialize(){ cout<<"Initialize"<<endl; };
};
template<bool>
class dispatcher
{
public:
template<typename _T>
dispatcher(_T& r){}
};
template<> class dispatcher<true>
{
public:
template<typename _T>
dispatcher(_T& r)
{
r.Initialize();
}
};
template<class T> void function( T t )
{
(dispatcher<is_same_type<ISupportInitialize, T>::value>(t));
}
int main()
{
Foo x;
int y;
function(x);
function(y);
}
2.
namespace __inner
{
template<typename _T> char fun(_T*);
template<typename _T> long fun(...);
}
template<typename _Base, typename _Sub>
struct is_same_type
{
enum{value = sizeof(char) == sizeof(__inner::fun<_Base>((_Sub*)0)) };
};
class ISupportInitialize
{
public:
virtual void Initialize() = 0;
};
class Foo: public ISupportInitialize
{
public:
virtual void Initialize(){ cout<<"Initialize"<<endl; };
};
template<bool>
class dispatcher
{
public:
template<typename _T>
dispatcher(_T& r){}
};
template<> class dispatcher<false> //***************就改了这一行*************
{
public:
template<typename _T>
dispatcher(_T& r)
{
r.Initialize();
}
};
template<class T> void function( T t )
{
(dispatcher<is_same_type<ISupportInitialize, T>::value>(t));
}
int main()
{
Foo x;
int y;
function(x);
function(y);
}
以上两份代码, 为什么第一份能编译, 而第二份不能编译(只把"true"改成了"false") !(只要求能编译, 不管逻辑是否正确), 请达人解释