Pra*_*ian 17 c++ overload-resolution c++11 universal-reference forwarding-reference
在使用通用引用的同时,我遇到了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预览中测试相同的代码,它同意clang; 除了Intellisense,这是在gcc的一方:-)
Joh*_*itb 18
"通用参考"推导出参数foo&.第一个模板也推导出参数foo&.
C++对函数模板有一个部分排序规则,使其T&更加专业化T&&.因此,必须在示例代码中选择第一个模板.
| 归档时间: | 
 | 
| 查看次数: | 360 次 | 
| 最近记录: |