以下代码使用返回类型推导(auto)和L值和R值对象的不同方法。似乎在组合两者时,gcc 4.9.2在重载分辨率方面存在问题:“调用重载'f()'是模棱两可的”。
这是一个错误还是另一个奇怪的C ++角落案例? Clang按预期接受了它。
struct T {
auto f() & {
return int{0};
}
auto f() && {
return string{""};
}
};
void test_it() {
//Calling with L-value object. Fails with "call of overloaded 'f()' is ambiguous").
T t;
int s = t.f();
//Calling with R-value object. Fails with "call of overloaded 'f()' is ambiguous").
string i = T{}.f();
}
可以使用在线编译器来研究这个例子:
gcc 4.9.2:http://goo.gl/IE19y8
铿锵3.5.1:http://goo.gl/FRbD8Z