Rozważmy następujący fragment kodu:std :: wiążą i odniesienie RValue
class Widget{
};
int main(){
Widget w;
auto lambda = bind([](Widget&& ref){ return; }, std::move(w));
return 0;
}
i wywołuje błąd
no match for call to ‘(std::_Bind<main()::<lambda(Widget&&)>(Widget)>)()’
lambda();
I moje pytanie brzmi: dlaczego pojawił się błąd? Wszakże robię wyraźną obsadę dla odniesienia rvalue - mam na myśli std::move(w)
i biorę argument przez referencję rvalue - mam na myśli Widget&& ref
.
Co słychać?
Ponadto poniższe prace kod, co mnie martwi tym bardziej:
class Widget{
};
int main(){
Widget w;
auto lambda = bind([](Widget& ref){ return; }, std::move(w));
return 0;
}
Twój przykład nie działa. Spróbuj zadzwonić do f(); – Gilgamesz
Jak się zorientowałeś, że ten przykład nie działa? Z powodzeniem skompilowałem go z moim kompilatorem. Z jakiego kompilatora korzystasz? – zaratustra
http://ideone.com/tl8tc3 – Gilgamesz