Virtual inheritance (C++)

You need virtual inheritance to solve the diamond problem with multiple inheritance.


Not working version

struct A {
    int val;
    A() : val(42) {}
};

struct B : A {};
struct C : A {};

struct D : B, C {}; // D has now A from B and C

int main() {
    D d; // Error
}
          A
        /   \
      B       C
        \   /
          D

Working version

struct A {
    int val;
    A() : val(42) {}
};

struct B : virtual A {};
struct C : virtual A {};

struct D : B, C {}; // D now has just one A

int main() {
    D d; // No error
}
          A
virtual /   \ virtual
      B       C
        \   /
          D