У мене функція шаблону перевантажена:
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;
}
Якщо я називаю це так:
auto a = overMax(4, 7.2); // uses first template
auto b = overMax<double>(4, 7.2); // uses second template
все працює ідеально, але
auto c = overMax<int>(4, 7.2); // error
викликає неоднозначний дзвінок.
Чому так з int , і добре, які інші типи?
int
, ви вказавшиtypename RT
абоtypename T1
? Оскільки4
також єint
, може бути будь-яким. Зdouble
, безпосередньо4
не відповідає типу , тому переважніше друге перевантаження.double