В следующем коде класс 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?