【发布时间】:2019-09-27 06:30:27
【问题描述】:
以下程序打印T,T。
#include <iostream>
template<typename T>
void f(T x, T y) {
std::cout << "T,T\n";
}
template<typename T1, typename T2>
void f(T1 x, T2 y) {
std::cout << "T1,T2\n";
}
int main() {
f(1, 1);
return 0;
}
在代码中哪个模板排在第一位没有区别。
我希望重载决议在这里是模棱两可的。 T、T1 和 T2 都应该推导出为 int,这使得两个模板都与调用站点完全匹配。
我找不到任何解析规则 (https://en.cppreference.com/w/cpp/language/overload_resolution) 来解释为什么它会选择第一个模板。
我使用clang++ -std=c++17 进行了测试,以防万一。
【问题讨论】:
-
相同的模板参数(
T、T)优于不同的模板参数(T1、T2)作为决胜局。
标签: c++ templates overload-resolution