Considérons le morceau de code suivant:std :: bind et référence rvalue
class Widget{
};
int main(){
Widget w;
auto lambda = bind([](Widget&& ref){ return; }, std::move(w));
return 0;
}
et déclenche l'erreur
no match for call to ‘(std::_Bind<main()::<lambda(Widget&&)>(Widget)>)()’
lambda();
Et ma question est: Pourquoi l'erreur est apparu? Après tout, je fais une distribution explicite à référence rvalue - je veux dire std::move(w)
et je prends argument par référence rvalue - je veux dire Widget&& ref
.
Quoi de neuf?
De plus, le travaux de code en dessous, ce qui me rend inquiet plus:
class Widget{
};
int main(){
Widget w;
auto lambda = bind([](Widget& ref){ return; }, std::move(w));
return 0;
}
Votre exemple ne fonctionne pas. Essayez d'appeler f(); – Gilgamesz
Comment avez-vous compris que cet exemple ne fonctionne pas? Je l'ai compilé avec succès avec mon compilateur. Quel compilateur utilisez-vous? – zaratustra
http://ideone.com/tl8tc3 – Gilgamesz