是功能模板参数T&和T&&暧昧?

时间:2014-01-19 17:55:20

标签: c++ c++11 rvalue-reference overload-resolution universal-reference

考虑这两个重载:

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&是优先于另一方,或者如果它们同样好。

0 个答案:

没有答案