int main()
{
auto l = [x = 10]() -> decltype(x) {};
}
clang++ 4.0 rejects this code với các lỗi sau:Tiếp cận khái quát-bắt các đối tượng trong lambda trailing trở lại loại
error: use of undeclared identifier 'x' auto l = [x = 10]() -> decltype(x) {}; ^
g++ 7 rejects this code với các lỗi sau:
In function 'int main()': error: 'x' was not declared in this scope auto l = [x = 10]() -> decltype(x) {}; ^ error: 'x' was not declared in this scope In lambda function: warning: no return statement in function returning non-void [-Wreturn-type] auto l = [x = 10]() -> decltype(x) {}; ^
Đây có phải là lỗi hoặc có điều gì đó trong tiêu chuẩn ngăn chặn rõ ràng các đối tượng được chụp bằng cú pháp tổng quát C++ 14 không được sử dụng trong kiểu trả về theo sau của lambda không?
Lưu ý rằng cả hai trình biên dịch đang hạnh phúc với những ảnh chụp không khái quát hóa:
int main()
{
int x = 10;
auto l = [x]() -> decltype(x) { return 0; };
}
'int' từng là loại trả về mặc định, gcc sẽ loại trừ bất kỳ loại nào khác không? – alexeykuzmin0
@ alexeykuzmin0: bắt tốt. [Nó luôn luôn "suy luận" 'int'] (http://melpon.org/wandbox/permlink/OivD8IYUT3Jq0720) ... cập nhật câu hỏi –
Có một số trường hợp lạ với' decltype' và lambdas, ví dụ: [this] (https://groups.google.com/a/isocpp.org/forum/#!topic/std-discussion/6-VL5bzK6Ik). – TartanLlama