This is brilliant. Microsoft Visual C++ violates the ISO C++ standard (at least as far as my 1998 document is concerned) with regards to this very fundamental and simple scoping behaviour, but they do not admit that this is a violation as such. Instead they claim that one can work around this “problem” by using a special compiler switch that disables “language extensions”. However, depending on your configuration, making use of this switch will break compilation of certain Visual C++ headers (ntheader.h IIRC). You have to love this.