0

我有一个有效的例子,但我相信它不应该

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
}

Godbolt 上的实时示例

对于 (1) 一切正常,完全模板匹配优于标准转换 double -> int

但是对于 (2) 产生的实例化看起来对于两个重载都是等效的,我预计在这种情况下会出错

仍然clang 11和gcc 10.2都同意(2)的最佳匹配是foo(int),所以看起来我不明白一些重要的事情

4

0 回答 0