Информация об изменениях

Сообщение Re[3]: Для чего шаблонной функции нужна особая сигнатура? от 23.01.2023 10:21

Изменено 23.01.2023 13:01 σ

Re[3]: Для чего шаблонной функции нужна особая сигнатура?
ЕМ>В данном случае то, что мне нужно — отдельный вопрос. Основной вопрос был о том, для чего сигнатура шаблонной функции отличается от сигнатуры перегруженной функции с той же комбинацией типов. Один из вариантов — для обеспечения приоритета. Еще могут быть какие-то основания?

Очевидно, для того, чтобы различать функции с одинаковым типом, но инстанциированные из разных шаблонов
template<typename T, typename U> void f(T, U); // 1
template<typename U, typename T> void f(T, U); // 2


int main()
{
    f<int, double>(0, 0.); // 1
    f<double, int>(0, 0.); // 2
}
Re[3]: Для чего шаблонной функции нужна особая сигнатура?
ЕМ>В данном случае то, что мне нужно — отдельный вопрос. Основной вопрос был о том, для чего сигнатура шаблонной функции отличается от сигнатуры перегруженной функции с той же комбинацией типов. Один из вариантов — для обеспечения приоритета. Еще могут быть какие-то основания?

Очевидно, для того, чтобы различать функции с одинаковым типом, но инстанциированные из разных шаблонов
template<typename T, typename U> void f(T, U); // 1
template<typename U, typename T> void f(T, U); // 2


int main()
{
    f<int, double>(0, 0.); // 1
    f<double, int>(0, 0.); // 2
}

(https://timsong-cpp.github.io/cppwp/n4659/temp.over.link#1)