Ich habe eine überladene Vorlagenfunktion:
template<typename T1, typename T2>
auto overMax(T1 a, T2 b)
{
std::cout << __FUNCSIG__ << std::endl;
return b < a ? a : b;
}
template<typename RT, typename T1, typename T2>
RT overMax(T1 a, T2 b)
{
std::cout << __FUNCSIG__ << std::endl;
return b < a ? a : b;
}
Wenn ich es so nenne:
auto a = overMax(4, 7.2); // uses first template
auto b = overMax<double>(4, 7.2); // uses second template
alles funktioniert perfekt, aber
auto c = overMax<int>(4, 7.2); // error
verursacht mehrdeutige Anrufe.
Warum ist es so mit int und OK welche anderen Typen?
intGeben Sie dastypename RToder das antypename T1? Da4ist auch einint, könnte es auch sein. Mitdouble,4nicht direkt den Typ entsprechendoublewird die zweite Überlast bevorzugt, so.