http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32039
Harald van Dijk <harald at gigawatt dot nl> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |harald at gigawatt dot nl --- Comment #5 from Harald van Dijk <harald at gigawatt dot nl> --- This bug is about visibility, bug 19337 is about accessibility. I incorrectly used "visibility" in my comment on the other bug, I apologise if that has confused matters. The comments there do not apply here. Normally, a qualified name such as A::foo can be used to refer to a hidden member. In this instance, however, the standard makes a special exception, and states that A::foo must be visible in B as well, even though a qualified name is used, for the using declaration to be valid. In B, int A::foo(int) is hidden by int B::foo(long) because B's member function has the same name. (3.3.10p1) A name is said to be visible, if it is in scope, and not hidden. (3.3.10p5) So I think this bug report is valid and unrelated to 19337: A's member function is indeed not visible in any of the direct bases of C. Your comment (the "In the example above, A (from using A::foo) is visible" bit) suggests that you read the standard as requiring that the base class be visible, rather than the base class member.