Следующий код prints "func 2".Разрешение перегрузки и явные аргументы шаблона
Почему компилятор рассматривает второй шаблон как лучшее совпадение в присутствии явных (не выводимых) аргументов шаблона? Почему нет двусмысленности?
Буду признателен за цитаты из стандарта C++.
#include <iostream>
template<class T>
struct identity
{
typedef T type;
};
template<class T>
void func(T)
{
std::cout << "func 1\n";
}
template<class T>
void func(typename identity<T>::type)
{
std::cout << "func 2\n";
}
int main()
{
func<int>(1);
}