下面的代码编译在Visual C++和gcc,但未能与代码战士暧昧模板,代码战士
的抱怨是,在调用模板是模糊的 - doIt方法之间不能决定(M *)和doIt(M 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); // Fail
doIt<N>(m2); // Fail
doIt<N,M>(m1); // OK
doIt<N,M>(m2); // OK
}
这是Code Warrior编译器的错误吗? (或与gcc/Visual C++错误)。
我不知道人们仍然使用良好的“代码战士”。他们不是不停止这样做吗? – 2009-09-11 23:59:05