使用相同名称重载不同功能模板之间的优先级

时间:2014-12-11 09:56:30

标签: c++ templates overloading

抱歉标题不清楚,如果找到更好的标题,请随时编辑。在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行,我认为编译器应该给出“模糊过载”错误。

1 个答案:

答案 0 :(得分:5)

B无法推断(没有参数的类型为B),因此模板1是唯一可能的重载。