考虑这两个重载:
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&
是否优于另一个,或者它们是否同样好。