次のコードprints "func 2"。オーバーロードの解像度と明示的なテンプレート引数
明示的(推論されていない)テンプレート引数があると、コンパイラは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);
}