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)
被选中。