https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69701
--- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- I think this should be diagnose differently in that A changes meanings inside the class. That is if we used: operator A () const noexcept { return {}; } We get the following error message: t9.cc:8:12: error: declaration of ‘void B::A()’ [-fpermissive] void A() {} ^ t9.cc:2:7: error: changes meaning of ‘A’ from ‘class A’ [-fpermissive] class A {}; ^