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

  • 本文关键字:UB 歧义 函数 常规 c++
  • 更新时间 :
  • 英文 :

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

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

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

它不是 UB,甚至不是模棱两可的,它只是重载分辨率:

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

int f(int)被选中。

相关内容

  • 没有找到相关文章

最新更新