10 Classes [class]

10.8 Member access control [class.access]

10.8.6 Multiple access [class.paths]

If a name can be reached by several paths through a multiple inheritance graph, the access is that of the path that gives most access.
[Example
:
class W { public: void f(); };
class A : private virtual W { };
class B : public virtual W { };
class C : public A, public B {
  void f() { W::f(); }          // OK
};
Since W::f() is available to C::f() along the public path through B, access is allowed.
end example
]