下面的代碼編譯在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