c++:在方法中组合自动和右值时出现gcc错误?

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

<分区>

以下代码对左值和右值对象使用返回类型推导(自动)和不同的方法。将两者结合起来时,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();
}

可以在此处使用在线编译器研究该示例:
海湾合作委员会 4.9.2:http://goo.gl/IE19y8
clang 3.5.1:http://goo.gl/FRbD8Z

最佳答案

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

关于c++:在方法中组合自动和右值时出现gcc错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29298029/

相关文章:

C++ Weird Diamond继承问题

c++ - 流类的基类

c++从另一个字符串中的列表中找到任何字符串

c - 如何判断一个C文件是否可以被gcc编译?

c++ - 如何将 gcc include 目录添加到现有的 Makefile

c++ - 通过引用将函数对象传递给标准算法

c++ - 使用 constexpr 函数时推导失败?

c++ - 对象数组的构造函数中的随机数

java - 编译开源数据包捕获软件

c++ - lambda 表达式的惰性实例化