#include <iostream>

struct V {
  virtual void f() {
    std::cout << "V" << std::endl;
  }
};

struct A : virtual V {
  virtual void f() {
    std::cout << "A" << std::endl;
  }
};

struct B : virtual V {
 virtual void f() {
    std::cout << "B" << std::endl;
 }
 B(V*, A*);
};

struct D : A, B {
  virtual void f() {}
  D() : B((A*)this, this) { }
};

B::B(V* v, A* a) {
  a->f(); // undefined behavior, a’s type not a base of B
}

int main() {
  D d;
}
