Hãy xem xét các đoạn mã sau:std :: ràng buộc và tài liệu tham khảo rvalue
class Widget{
};
int main(){
Widget w;
auto lambda = bind([](Widget&& ref){ return; }, std::move(w));
return 0;
}
và nó gây ra lỗi
no match for call to ‘(std::_Bind<main()::<lambda(Widget&&)>(Widget)>)()’
lambda();
Và câu hỏi của tôi là: Tại sao các lỗi đã xuất hiện? Sau khi tất cả, tôi làm một diễn viên rõ ràng để tham khảo rvalue - Tôi có nghĩa là std::move(w)
và tôi có đối số bằng tham chiếu rvalue - Tôi có nghĩa là Widget&& ref
.
Có chuyện gì?
Hơn nữa các hoạt động của mã dưới đây, những gì làm cho tôi lo lắng hơn:
class Widget{
};
int main(){
Widget w;
auto lambda = bind([](Widget& ref){ return; }, std::move(w));
return 0;
}
dụ của bạn không hoạt động. Hãy thử gọi f(); – Gilgamesz
Làm thế nào bạn nhận ra rằng ví dụ này không hoạt động? Tôi biên dịch thành công nó với trình biên dịch của tôi. Trình biên dịch nào bạn sử dụng? – zaratustra
http://ideone.com/tl8tc3 – Gilgamesz