------- Comment #8 from bangerth at gmail dot com 2010-03-03 19:40 ------- (In reply to comment #7) > The use of a base class ( class B : A ) is not a declaration of A. > Thus the base class ( class A ) is visible and not private. > > Reopen the bug and fix it.
Andrew was right: the name 'A' is injected into the class 'A' upon declaration of the class 'A', into 'B' upon deriving from it, and from 'B' into 'C'. This amounts to a 'using' declaration. As such, 'A' exists in 'C' as a name, but it is private and consequently inaccessible. Since you cite chapter and verse, take a look at 3.4/3 and 9.1/2. As stated before, if you don't want the locally injected name, use ::A instead. W. -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20397