Le code suivant compile dans Visual C++ et gcc, mais échoue avec le code guerriermodèle Ambigu, CodeWarrior
La plainte est que l'appel au modèle est ambigu - ne peut pas décider entre doIt (M *) et doIt (M const *), même si dans chaque cas, le paramètre est sans ambiguïté cost ou non-const. Irritant, si je fournis le deuxième argument de modèle, il décide qu'il n'est plus ambigu.
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
}
Est-ce juste une erreur avec le compilateur Code Warrior? (Ou et erreur avec gcc/Visual C++).
Je ne savais pas que les gens utilisaient encore le bon vieux Code Warrior. N'ont-ils pas arrêté de faire ça? –