Saya memiliki fungsi template yang kelebihan beban:
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;
}
Jika saya menyebutnya seperti ini:
auto a = overMax(4, 7.2); // uses first template
auto b = overMax<double>(4, 7.2); // uses second template
semuanya bekerja dengan sempurna, tetapi
auto c = overMax<int>(4, 7.2); // error
menyebabkan panggilan ambigu.
Mengapa begitu dengan int , dan OK jenis apa yang lain?
int
, apakah Anda menentukantypename RT
atautypename T1
? Karena4
juga merupakanint
, bisa jadi keduanya. Dengandouble
,4
tidak secara langsung cocok dengan jenisnyadouble
, jadi kelebihan kedua lebih disukai.