https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85128

--- Comment #5 from Steffen Nurpmeso <steffen at sdaoden dot eu> ---
Sorry for not providing a test case.

   The C++ standard is clear here about this case too.

I have a PDF version of a 2014 draft, and i would not see that in case your
words are implying that gcc is right?

In 7.1.3, The typedef specifier, i read

  Within the scope of its declaration, a typedef-name is syntactically
equivalent to a keyword...

So, in item 5,

  In a given class scope, a typedef specifier can be used to redefine any
class-name declared in that scope that is not also a typedef-name to refer to
the type to which it already refers.

The example is

  struct S {
    typedef struct A { } A;  // Ok
    typedef struct B B; // Ok
    typedef A A; // Ok
  };

This does not apply since the yet existing AutoToolbox is from an outer scope,
and not a typedef by itself.

In item 7,

  In a given scope, a typedef specifier shall not be used to redefine the name
of any type declared in that scope to refer to a different type.

Does not apply since we have different scopes.
Item 8

  Similarly, in a given scope, a class or enumeration shall not be declared
with the same name as a typedef-name that is declared in that scope and refers
to a type other than the class or enumeration itself.

Does not apply thus.
But we have 9.2, Class members:

  Nested types are classes (9.1, 9.7) and enumerations (7.2) defined in the
class,  and arbitrary types declared as members by use of a typedef declaration
(7.1.3)

What do you say?

Reply via email to