在使用通用引用时,我遇到了这种情况,clang 和 gcc 在重载解决方案上存在分歧。
#include <iostream>
struct foo {};
template<typename T>
void bar(T&) { std::cout << "void bar(T&)\n"; }
template<typename T>
void bar(T&&) { std::cout << "void bar(T&&)\n"; }
int main()
{
foo f;
bar(f); // ambiguous on gcc, ok on clang
}
gcc 报告上面的调用不明确。但是,clang选择了T&
重载并成功编译。
哪个编译器错了,为什么?
编辑:
在 VS2013 Preview 上测试了相同的代码,它与 clang 一致;除了 Intellisense,它在 gcc 方面:-)