https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69701
Language Lawyer <language.lawyer at gmail dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |language.lawyer at gmail dot com --- Comment #7 from Language Lawyer <language.lawyer at gmail dot com> --- Another example related to CWG2396: struct B { struct S {}; operator S(); }; auto v = B{}.operator struct S(); // error: 'struct B' has no member named 'operator S' It can be checked that GCC injects unrelated `struct S` into the global namespace and then tries to find `operator struct ::S` in B. However, according to P1787R6 [basic.lookup.unqual]/5: An unqualified name that is a component name of a type-specifier or ptr-operator of a conversion-type-id is looked up in the same fashion as the conversion-function-id in which it appears. In an elaborated-type-specifier of the form "class-key identifier", such as `struct S`, identifier is a component name ([dcl.type.elab]/1), so S shall be searched in B first.