J'ai une fonction de modèle surchargée:
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;
}
Si je l'appelle comme ça:
auto a = overMax(4, 7.2); // uses first template
auto b = overMax<double>(4, 7.2); // uses second template
tout fonctionne parfaitement, mais
auto c = overMax<int>(4, 7.2); // error
provoque un appel ambigu.
Pourquoi en est-il ainsi avec int , et OK quels autres types?
int
, spécifiez-vous letypename RT
ou letypename T1
? Puisque4
c'est aussi unint
, ça pourrait être l'un ou l'autre. Avecdouble
,4
ne correspond pas directement au typedouble
, la deuxième surcharge est donc préférable.