相关疑难解决方法(0)

左值参数是否比通用引用更喜欢左值引用参数?

在使用通用引用的同时,我遇到了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
}
Run Code Online (Sandbox Code Playgroud)

gcc报告上面的调用是模棱两可的.但是,clang选择T&重载并成功编译.

哪个编译器有问题,为什么?

编辑:
在VS2013预览中测试相同的代码,它同意clang; 除了Intellisense,这是在gcc的一方:-)

c++ overload-resolution c++11 universal-reference forwarding-reference

17
推荐指数
1
解决办法
360
查看次数