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

Andrew Pinski <pinskia at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
     Ever confirmed|0                           |1
           Keywords|                            |diagnostic
   Last reconfirmed|                            |2021-08-13
           Severity|minor                       |enhancement

--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
Confirmed, this is just a diagnostic issue.
You are missing class or an underlying type.

ICC gives the closest but still misses the point slightly:
<source>(13): error: an unscoped enumeration must be opaque in order to be
specialized
  template <> enum  Foo<int>::E12
                              ^

<source>(15): error: enumerator already declared (see constant "Foo<x>::a [with
x=int]" (declared at line 5))
      a, b, c
      ^

For C++98, gcc gives a decent error message:
<source>:13:19: error: multiple definition of 'enum Foo<int>::E12'
   13 | template <> enum  Foo<int>::E12
      |                   ^~~~~~~~
<source>:5:11: note: previous definition here
    5 |     enum  E12 { a };
      |           ^~~

Though this could be improved, clang gives a decent one there:
<source>:14:1: error: enumeration cannot be a template
{
^
<source>:13:13: error: declaration does not declare anything
template <> enum  Foo<int>::E12
            ^

ICC is not bad either:
<source>(13): error: enum "Foo<x>::E12 [with x=int]" cannot be defined in the
current scope
  template <> enum  Foo<int>::E12
                    ^

Reply via email to