The following program exhibits different behavior with gcc vs. g++:
dgregor$ cat t.c
#include <stdio.h>
int main()
{
int i;
for( i = 0; i < 3; )
for( ; ; ({ i++; break; }) )
printf( "%d\n", i );
}
With gcc, the break in the statement expression applies to the outer "for"
loop, so we get just "0" as output:
dgregor$ gcc t.c && ./a.out
0
with g++, the break in the statement expression applies to the inner "for"
loop, so we get "0" "1" and "2" as the output:
dgregor$ g++ t.c && ./a.out
0
1
2
g++ seems to have the right behavior here, and in any case g++ can't really be
changed now: Qt's foreach macro depends on having "break" bind to the inner for
loop.
--
Summary: Break in increment expression of "for" statement
inconsistent with g++
Product: gcc
Version: 4.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: doug dot gregor at gmail dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44715