------- Comment #10 from dougsemler at gmail dot com 2010-05-09 23:25 ------- (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") -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37231