The following code (from 3.4.5-4 - class member access) is rejected: struct A { int a; }; struct B: virtual A { }; struct C: B { }; struct D: B { }; struct E : public C, public D { }; void f() { E e; e.B::a = 0; } f1.cxx: In function 'void f()': f1.cxx:25:8: error: 'B' is an ambiguous base of 'E' According to 10.2.5 (Member name lookup), member access e.B::a = 0 is OK because there is only one "a" (virtual)
The example was wrong and is not in C++11 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#381
Thanks