https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99160
--- Comment #6 from jim x <xmh970252187 at gmail dot com> --- struct A{ struct Name{}; void Name(){} }; struct B:A{ using A::Name; //#1 }; int main() { struct B::Name d; } According to [basic.lookup#general-4], the lookup set occurs at `#1` would discard the declaration of class "Name" since there is another declaration be found. [namespace.udecl#1] just requires these type declarations are ignored when checking for ambiguity but are not actually ignored in the the set of declarations.