static int g_next_value = 12345; struct VBase { VBase() : m_value(g_next_value++) {} virtual ~VBase() {} int m_value; }; struct Derived1 : public virtual VBase { }; struct Derived2 : public virtual VBase { }; struct Joiner1 : public Derived1, public Derived2 { long x = 1; }; struct Joiner2 : public Derived2 { long y = 2; }; int main(int argc, const char *argv[]) { Joiner1 j1; Joiner2 j2; Derived2 *d = &j1; d = &j2; // breakpoint 1 return 0; // breakpoint 2 }