【发布时间】:2013-07-31 19:31:40
【问题描述】:
在使用通用引用时,我遇到了这种情况,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 reports 上面的调用是模棱两可的。但是clang选择T&重载,编译成功。
哪个编译器出错了,为什么?
编辑:
在VS2013 Preview上测试了同样的代码,和clang一致;除了 Intellisense,它在 gcc 方面 :-)
【问题讨论】:
-
intel(13.0.1) 和 pgi(13.4) 编译器也会产生一个错误。
标签: c++ c++11 overload-resolution universal-reference forwarding-reference