Как передать int в качестве аргумента rvalue функции или конструктору? - PullRequest
1 голос
/ 21 октября 2019

В следующем коде класс A имеет 2 конструктора, один из которых принимает int по значению, а другой принимает int по ссылке rvalue. Как создать объект, используя второй вызов конструктора.

#include <iostream>
using namespace std;

class A
{
public:
  A(int i) : r_i(i)
  {
    cout<<endl<<"A(inti)";
  }

  A(int&& i) : r_i(i)
  {
    cout<<endl<<"A(int&&)";
  }

private:
  int &r_i;
};

int main()
{
  int j = 5;
  A a(j); // Works
  A b(std::move(j)); //  Error [1]
}

Ошибка [1]: вызов перегруженного 'A(std::remove_reference<int&>::type)' неоднозначен

Какое правило c ++ предотвращает вызов конструктора rvalue?

...