https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99160
--- Comment #2 from Jonathan Wakely <redi at gcc dot gnu.org> --- I think GCC is correct here. The using-declaration finds a class and a function, and ignores the class, which means it only redeclares the function as public. That means B::C is indeed referring to a private name.