Почему этот вызов rvalue неоднозначен? Я могу иметь AA и AA &, и компилятор будет знать, что использовать AA&
. Но когда я добавляю третий вариант, я получаю ошибку. Очевидно, что AA && - лучшая перегрузка, чем другие, например int, для int лучше, чем long. Почему это неоднозначно? Есть ли способ, которым я могу сохранить все 3 перегрузки и дать понять, какой я хочу? (Typecasting (AA&&)
этого не сделает).
struct AA{
void*this_;
AA() { this_=this; }
//not valid, use AA&, AA(AA a){ this_=this; }
AA(AA&a){ this_=this; }
AA(AA&&a){ this_=a.this_; }
};
void movetest(AA s) {}
void movetest(AA& s) {}
//This gets me the ambiguous error void movetest(AA&& s) {}
AA&& movetest() { return AA(); }
void MyTestCode2(){
AA a;
AA b(a);
AA c = movetest();
movetest(AA());
}