Следующий код компилируется в Visual C ++ и gcc, но не работает с Code Warrior
Жалоба на то, что вызов шаблона является неоднозначным - нельзя выбирать между 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 ++).