如果定义了 BREAK,g++ 4.6.3 和 4.7.2 将无法编译以下代码(在 c++0x 模式下)。
template<class T> struct Test {
Test(T&) {}
#ifdef BREAK
Test(T&&) = delete;
#endif
};
void func(Test<int> const&) {}
void func(Test<double> const&) {}
int main()
{
int x = 0;
func(x);
return 0;
}
错误是
error: call of overloaded 'func(int&)' is ambiguous
而 clang 3.2 RC2 和 VC11 (如果我替换Test(T&&) = delete;
为private: Test(T&&);
)接受代码。
我看不出哪里应该模棱两可。
这是一个 g++ 问题吗?(我不知道在 gcc 错误列表中搜索什么......)