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.

Reply via email to