c ++:在方法中组合auto和r值时的gcc错误?

时间:2015-03-27 10:07:08

标签: c++ gcc c++14 clang++

以下代码使用返回类型推导(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

1 个答案:

答案 0 :(得分:0)

原来这是一个已知的错误: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60943