Cập nhật: như lời hứa của chủ tịch Core trong trích dẫn dưới cùng, mã hiện không được định dạng :
Nếu một định danh trong một đơn giản chụp xuất hiện như là declarator-id của một tham số của lambda-declarator 's tham số-khai-khoản , chương trình là vô hình thành.
Có một vài vấn đề liên quan đến việc tra cứu tên trong lambdas một thời gian trước đây. Họ đã được giải quyết bằng N2927 :
Từ ngữ mới không còn phụ thuộc vào việc tra cứu để sử dụng lại các thực thể bị bắt. Nó phủ nhận rõ ràng hơn những diễn giải rằng câu lệnh ghép của lambda được xử lý trong hai lần hoặc bất kỳ tên nào trong câu lệnh ghép đó có thể giải quyết cho một thành viên của kiểu đóng.
Tra cứu luôn được thực hiện trong ngữ cảnh của biểu thức lambda , không bao giờ "sau" chuyển đổi thành thân hàm thành viên của kiểu đóng. Xem [expr.prim.lambda] / 8 :
Câu lệnh ghép của biểu thức lambda mang lại thân hàm ([dcl.fct.def]) của toán tử gọi hàm, nhưng với mục đích tra cứu tên, [đùa], câu lệnh ghép được xem xét trong ngữ cảnh của các lambda-biểu . [ Ví dụ :
struct S1 {
int x, y;
int operator()(int);
void f() {
[=]()->int {
return operator()(this->x+y); // equivalent to: S1::operator()(this->x+(*this).y)
// and this has type S1*
};
}
};
- ví dụ cuối ]
(Ví dụ cũng làm rõ rằng việc tra cứu không bằng cách nào đó xem xét thành viên chụp được tạo ra của kiểu đóng.)
Tên foo
không được khai báo lại trong bản chụp; nó được khai báo trong khối kèm theo biểu thức lambda. Tham số foo
được khai báo trong một khối được lồng trong khối bên ngoài đó (xem [basic.scope.block] / 2 , cũng đề cập rõ ràng đến các tham số lambda). Thứ tự tra cứu rõ ràng từ khối bên trong đến khối bên ngoài . Do đó tham số nên được chọn, nghĩa là Clang đúng.
Nếu bạn định chụp ảnh bắt đầu, tức là foo = ""
thay vì foo
, câu trả lời sẽ không rõ ràng. Điều này là do việc chụp hiện thực sự gây ra một tuyên bố có "khối" không được đưa ra. Tôi nhắn tin cho cái ghế cốt lõi này, ai trả lời
Đây là vấn đề 2211 (một danh sách các vấn đề mới sẽ sớm xuất hiện trên trang web open-std.org, thật không may, chỉ với những người giữ chỗ cho một số vấn đề, trong đó đây là một vấn đề; Tôi đang nỗ lực để lấp đầy những khoảng trống đó trước Kona họp vào cuối tháng). CWG đã thảo luận về vấn đề này trong buổi hội thảo từ xa vào tháng 1 của chúng tôi và hướng đi là làm cho chương trình không thành hình nếu tên chụp cũng là tên tham số.