тип функции авто возврата + перегрузка rvalue = неоднозначный вызов? - PullRequest
1 голос
/ 17 февраля 2020

Я ищу причину, по которой это не скомпилируется (g cc, c ++ 14)

#include <iostream>

class Widget
{
  private:
    int i = 0;
  public:
    auto get() & { return i;}
    auto get() && { return i+1;}
};

int main()
{
  Widget w;
  auto val = w.get();
  std::cout<<val;
}

Ошибка

23:31: error: call of overloaded 'get()' is ambiguous
23:31: note: candidates are:
10:10: note: auto Widget::get()
11:10: note: auto Widget::get()

Это работает, если Я использую явный тип возврата для функций get ()

int get() & { return i;}
int get() && { return i+1;}
...