Consider the following code sample:

struct A { };
typedef struct A A;
struct A a;                     // [1]

struct wrapper {
  struct B { };
  typedef struct B B;
  struct B b;                   // [2]
};

Mainline gives an error for line [2], but not for line [1].  My reading of the 
standard is that there 
shouldn't be any difference.  In both cases we're using an elaborated type 
specifier with a name that 
resolves to a typedef-name.  A program that does that is ill formed, so the 
compiler is required to 
admit a diagnostic.  We're doing that for line [2], but we're failing to do it 
for line [1].

Relevant passages in the standard: 3.4.4/2, 7.1.3/4, 7.1.5.3/2.

-- 
           Summary: Missing diagnostic for typedef name in elaborated type
                    specifier
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: austern at apple dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: powerpc-apple-darwin7.7.0
  GCC host triplet: powerpc-apple-darwin7.7.0
GCC target triplet: powerpc-apple-darwin7.7.0


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

Reply via email to