下面的代码在VisualC++和GCC中编译,但代码战士失败了
抱怨的是,对模板的调用是不明确的——不能决定doit(m*)和doit(m const*),即使在每种情况下,参数都是明确的cost或non const。令人恼火的是,如果我提供第二个模板参数,它将决定不再含糊不清。
template< typename T1, typename T2 >
T1 const* doIt( T2 const* );
template< typename T1, typename T2 >
T1* doIt( T2* );
class M {};
class N : public M {};
void f()
{
M* m1 = NULL;
M const* m2 = NULL;
doIt<N>( m1 );
doIt<N>( m2 );
doIt<N,M>( m1 );
doIt<N,M>( m2 );
}
这只是代码勇士编译器的一个错误吗?(或与GCC/Visual C++的错误)。