模板与常规函数的歧义-UB?

时间:2018-08-13 22:21:04

标签: c++

template<typename T> T f(T i) { return i+1; }
int f(int i) { return i-1; }

f(2);

这是否是未定义的行为(请注意,int f(int)不是专门化的)?如果是,那么请指出标准情况在哪里。

2 个答案:

答案 0 :(得分:6)

这里没有歧义。如果使用f调用了int,则只要使用时两个声明都可见,就会始终选择非模板版本的重载。

答案 1 :(得分:5)

它不是UB,甚至也不是模棱两可,它只是overload resolution

两者都是完全匹配,但一个是模板函数,而另一个不是:

int f(int)被选中。

相关问题