Consideriamo il seguente pezzo di codice:std :: bind e riferimento rvalue
class Widget{
};
int main(){
Widget w;
auto lambda = bind([](Widget&& ref){ return; }, std::move(w));
return 0;
}
e innesca l'errore
no match for call to ‘(std::_Bind<main()::<lambda(Widget&&)>(Widget)>)()’
lambda();
Ed è la mia domanda: perché è apparso l'errore? Dopotutto, faccio un cast esplicito a riferimento di rvalue - intendo lo std::move(w)
e prendo argomento per riferimento di rvalue - intendo Widget&& ref
.
Che succede?
Inoltre l'opere codice qui sotto, ciò che rende mi preoccupava più:
class Widget{
};
int main(){
Widget w;
auto lambda = bind([](Widget& ref){ return; }, std::move(w));
return 0;
}
Il tuo esempio non funziona. Prova a chiamare f(); – Gilgamesz
Come hai capito che questo esempio non funziona? L'ho compilato con successo con il mio compilatore. Che compilatore usi? – zaratustra
http://ideone.com/tl8tc3 – Gilgamesz