https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103084
Bug ID: 103084 Summary: Accepts invalid using enum declaration with an invalid elaborated-type-specifier Product: gcc Version: 12.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: aaron at aaronballman dot com Target Milestone: --- GCC (and MSVC) currently accepts the following snippet while Clang and ICC reject: ``` enum class Pig { Oink }; using Hog = Pig; using enum Hog; // Clang & ICC rejects, GCC & MSVC accepts ``` I think Clang and ICC are correct to reject this code. http://eel.is/c++draft/enum.udecl says that the production needs to parse an elaborated-enum-specifier. One of the requirements for a valid elaborated-enum-specifier is that the elaboration has to agree in kind with the given declaration (https://eel.is/c++draft/dcl.type.elab#6). In this case, the given declaration is not an enum, it's a type alias. Note that all compilers reject the following slightly different example due to the elaborated type specifier being invalid: ``` enum class Pig { Oink }; using Hog = Pig; enum Hog H; // Everyone rejects ```