https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96593
Bug ID: 96593 Summary: No "declaration changes meaning" diagnostic for alias templates Product: gcc Version: 11.0 Status: UNCONFIRMED Keywords: diagnostic Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: language.lawyer at gmail dot com Target Milestone: --- "A name N used in a class S shall refer to the same declaration in its context and when re-evaluated in the completed scope of S. No diagnostic is required for a violation of this rule." The diagnostic for the rule is not required, but since GCC diagnoses some of the cases, there is a bugreport about missing diagnostic cases (bug 46983), and the check might become mandatory (will it?), I'd like file this bug. GCC accepts the code with alias templates: struct S {}; template <typename> struct T {}; struct U { template<typename> using S = S; template<typename> using T = T<void>; }; but produces the "declaration changes meaning" error for type aliases. GCC also diagnoses the case if the "outer" declaration is used before the corresponding alias template: struct S {}; struct U { S s; template<typename> using S = S; // error: declaration of ... changes meaning of 'S' }; (From https://stackoverflow.com/q/63369264/)