Code:Truy cập tên phạm vi bên ngoài trong một lambda, là g ++ hoặc Visual hay không, phải không?
auto main() -> int
{
int b = 42;
auto lambasta = [&]()
{
using B_type = decltype(b);
return B_type{};
};
(void) lambasta;
}
Biên dịch không có chẩn đoán với MinGW g ++ 6.3.0 -std=c++14 -Wall -pedantic-errors
. Thất bại trong việc biên dịch với Visual C++ 2015 cập nhật 3,
foo.cpp(6): error C2065: 'b': undeclared identifier
Compile ngay cả khi không chụp cho clagg/gcc [Demo] (http://coliru.stacked-crooked.com/a/002edb55e3a07e00). – Jarod42
Có '& b' trong danh sách chụp không? –
@TheQuantumPhysicist: Có, rõ ràng chụp tên giúp Visual C++ hiểu rằng nó tồn tại. Vì vậy, thực tế sử dụng ODR của tên (trước khi đề cập đến). Thật không may đó không phải là một giải pháp cho vấn đề ban đầu của tôi, nơi tên xuất hiện trong một biểu thức được cung cấp dưới dạng đối số macro. –