If a base class is both virtual
and non-virtual in a multiple inheritance hierarchy then there will be at least two copies of the base
class sub-object in the derived object. This may not be consistent with developer expectations.
Noncompliant code example
class A {};
class B1: public virtual A {};
class B2: public virtual A {};
class B3: public A {};
class C: public B1, B2, B3 {}; // Noncompliant, A is both virtual (through B1 and B2) and non-virtual (through B3)
Compliant solution
class A {};
class B1: public virtual A {};
class B2: public virtual A {};
class B3: public virtual A {};
class C: public B1, B2, B3 {}; // Compliant, A is always virtual