#include <iostream>
template <class U, class T>
void foo(U&, T&)
{
std::cout << "first";
}
template <class T>
void foo(int&, const T&)
{
std::cout << "second";
}
int main()
{
int a;
double g = 2.;
foo(a, g); // prints "first"
return 0;
}
Чтобы вызвать вторую перегрузку foo
, компилятору необходимо выполнить только один вывод типа шаблона, но для первой перегрузки ему необходимо выполнить два. Не могли бы вы объяснить, почему называется первая перегрузка?