The C++ standard, clauses 3.3.2 paragraph 4, and 6.4 paragraph 3, states that
names declared in the condition of `while', `if', `for' and `switch'
statements, may not be redeclared in any of the outermost controlled blocks.

This does work for `while' statements, however it does not work with `if', or
`switch' statements.

E.g. The following are compiled, but should not:

if (int foo = 0)
  {
    int foo = 1; // invalid
  }

switch (int foo = 0)
  {
    default:
      int foo = 1; // invalid
  }

A similar example with a for statement is reported in Bug #2288


-- 
           Summary: names declared in a condition may be redeclared
           Product: gcc
           Version: 4.1.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: andrew dot stubbs at st dot com


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=31956

Reply via email to