------- Comment #11 from alex dot pyattaev at gmail dot com 2010-05-09 23:29 ------- (In reply to comment #10) > (In reply to comment #9) > > > > A good example of seemingly normal code is following: > > switch (whatever) > > { > > case 1: > > int i=0; > > i++; > > printf("%d",i); > > break; > > } > > It is technically perfectly legal to declare i as a local variable. However, > > the compiler issues an error. And it is absolutely not clear why "int i=0;" > > is > > not a statement. That is probably the only really annoying case. Moving > > declaration of i into a code block solves the issue. I spent like 10 minutes > > trying to find out why perfectly legal code would not compile. > > > > Not to beat a dead horse here but... > > Because that is *not* perfectly legal C code, and will not be valid C++ code > if > you add another case label after it (jump over initialization)? A declaration > ("int i") is not a statement. > > That fails on both MSVC and gcc. In fact, MSVC will still barf even after > adding a semicolon after the label to make it a statement. (MSVC error is > "error 2143: missing ';' before type") > Ok, lets have pity for dead horse. Let it be as it is=)
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37231