抱歉标题不清楚,如果找到更好的标题,请随时编辑。在Priority between normal function and Template function中已经深入讨论了一个相关主题, 但我没有找到问题的答案。
我的代码是:
template<typename T>
void f(T t){std::cout << "Template 1" << std::endl;} // template 1
template<typename T, typename B>
void f(T t){std::cout << "Template 2" << std::endl;} // template 2
int main () {
f(1); // line 1, template 1 will be called
f<int>(1); // template 1 will be called
f<int,int>(1); // template 2 will be called
}
在第1行调用模板1函数的可能原因是什么?是否在规范中明确定义了?
在第1行,我认为编译器应该给出“模糊过载”错误。
答案 0 :(得分:5)
B
无法推断(没有参数的类型为B
),因此模板1是唯一可能的重载。