我有一个有效的例子,但我相信它不应该
template <typename T>
void foo(int n) {
std::cout << "foo(int)" << std::endl;
}
template <typename T>
void foo(T t) {
std::cout << "foo(T)" << std::endl;
}
int main() {
foo<double>(42.0); // 1
foo<int>(42); // 2
}
对于 (1) 一切正常,完全模板匹配优于标准转换 double -> int
但是对于 (2) 产生的实例化看起来对于两个重载都是等效的,我预计在这种情况下会出错
仍然clang 11和gcc 10.2都同意(2)的最佳匹配是foo(int),所以看起来我不明白一些重要的事情