struct X { struct Y { }; Y* begin(); Y* end(); }; void f() { X x; for (struct X::Y& y : x) ; } This is valid, but GCC 6 and 7 say: for.cc:11:8: error: types may not be defined in a for-range-declaration [-fpermissive] for (struct X::Y& y : x) ^~~~~~
Author: jason Date: Mon Feb 20 06:05:54 2017 New Revision: 245591 URL: https://gcc.gnu.org/viewcvs?rev=245591&root=gcc&view=rev Log: PR c++/79566 - elaborated-type-specifier in range for * parser.c (cp_parser_simple_declaration): Fix check for type definition. Added: trunk/gcc/testsuite/g++.dg/cpp0x/range-for34.C Modified: trunk/gcc/cp/ChangeLog trunk/gcc/cp/parser.c
Fixed on trunk so far.
Author: jason Date: Wed Apr 12 19:22:50 2017 New Revision: 246887 URL: https://gcc.gnu.org/viewcvs?rev=246887&root=gcc&view=rev Log: PR c++/79566 - elaborated-type-specifier in range for * parser.c (cp_parser_simple_declaration): Fix check for type definition. Added: branches/gcc-6-branch/gcc/testsuite/g++.dg/cpp0x/range-for34.C Modified: branches/gcc-6-branch/gcc/cp/ChangeLog branches/gcc-6-branch/gcc/cp/parser.c
Fixed for 6.4.