Из вашего вопроса не совсем ясно, какой тип вы ожидаете T
в этом сценарии, но если вы хотите, чтобы это был, например, тип первого аргумента, тогда вы можете сделать второй параметр не выводимый контекст:
template <typename T>
T max(T x, std::type_identity<T>::type y)
{
return (x > y)? x : y;
}
std::type_identity
- это функция C ++ 20, но ее реализация действительно проста:
template<typename T>
struct type_identity {
using type = T;
};
Все, что осталось от оператора разрешения области в параметре не выводится, поэтому весь параметр является не выводимым контекстом и не будет участвовать в выводе аргумента шаблона. Вместо этого будут применяться обычные неявные преобразования в разрешении перегрузки.