If you really want this, you will check both base classes:
class A {}; class B : public A {}; class C : public A {}; class D : public B, public C { static_assert(!(is_base_of<A,B>::value && is_base_of<A,C>::value), "Invalid inheritance!"); };
Otherwise, you can make classes inherited from almost A, so that only one instance remains in the derived class:
class A {}; class B : public virtual A {}; class C : public virtual A {}; class D : public B, public C {
source share