diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 0b8e2f7..ad1c209 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2719,8 +2719,10 @@ finish_member_declaration (tree decl) /*friend_p=*/0); } } - /* Enter the DECL into the scope of the class. */ - else if (pushdecl_class_level (decl)) + /* Enter the DECL into the scope of the class, if the class + isn't a closure (whose fields are supposed to be unnamed). */ + else if (CLASSTYPE_LAMBDA_EXPR (current_class_type) + || pushdecl_class_level (decl)) { if (TREE_CODE (decl) == USING_DECL) { diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C new file mode 100644 index 0000000..df2b037 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-names1.C @@ -0,0 +1,9 @@ +// PR c++/56710 +// { dg-options "-std=c++11 -Wall" } + +int main() +{ + int t = 0; + return [&]() -> int {int __t; __t = t; return __t; }(); + return [&t]() -> int {int __t; __t = t; return __t; }(); +} -- 1.8.4.2