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

            Bug ID: 93809
           Summary: bogus error class tag used in naming union on typedef
                    typename ::U U2
           Product: gcc
           Version: 10.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: msebor at gcc dot gnu.org
  Target Milestone: ---

While testing a fix for pr93801 I noticed that G++ rejects the last type
definition in the test case below.  The code looks valid to me and is accepted
by all other compilers I tried (Clang, ICC, and Visual C++).

$ cat t.C && gcc -S t.C
class C { };
enum E { };
struct S { };
union U { };

typedef typename ::C C2;
typedef typename ::E E2;
typedef typename ::S S2;
typedef typename ::U U2;   // error

t.C:9:20: error: ‘class’ tag used in naming ‘union U’ [-fpermissive]
    9 | typedef typename ::U U2;   // error
      |                    ^
t.C:4:7: note: ‘union U’ was previously declared here
    4 | union U { };
      |       ^

Reply via email to