¿Por qué esta llamada rvalue es ambigua? Puedo tener AA y AA & y el compilador sabrá usar AA&
. Pero cuando agrego en la tercera opción recibo un error. Obviamente, AA & & es una mejor sobrecarga que las otras, como int para una int, es mejor que larga. ¿Por qué es esto ambiguo? ¿Hay alguna manera de mantener las 3 sobrecargas y dejar claro cuál quiero? (Typecasting (AA&&)
no lo hará).¿Por qué esta llamada rvalue es ambigua?
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());
}
(En una nota, el cero-aridad 'movetest' función devuelve una referencia a una variable local.) – GManNickG
(También voy Por lo general, no querrás las tres sobrecargas de todos modos.) – GManNickG
@GMan: ¿Qué ... por qué? ¿eh? Tal vez se puede explicar esto, así http://stackoverflow.com/questions/5591995/is-move-by-lvalue-broken-unfinished-in-msvc2010 –