Well. One more thing to add: I think that void foo() { int x; { int x; } } Mustn't be a scoping error. This is a very powerful feature. It helps to avoid the names like int x2 or another_x. It makes naming easy. And it is widely used in select/case blocks. Regards, Aleksey.