考虑这两个重载:
template <typename T> void foo(T &) {}
template <typename T> void foo(T &&) {}
它们可能含糊不清吗?
下面的代码用Clang 3.4编译,但是GCC 4.8失败了,它说过载(第一个带T = int
,第二个带T = int&
)是不明确的。
int main()
{
int n = 10;
foo(n);
}
我意识到“绑定到参考”在重载分辨率方面是“完全匹配”,所以我想这个问题归结为是否有一个扣除T = int
/ T = int&
是优先于另一方,或者如果它们同样好。