struct A { int a; A (int aa): a (aa) {} }; struct B: public A { int b; B (int aa, int bb): A (aa), b(bb) {} }; struct Alpha { virtual void x() { } }; struct Gamma { }; struct Derived : public Alpha { }; struct VirtuallyDerived : public virtual Alpha { }; struct DoublyDerived : public VirtuallyDerived, public virtual Alpha, public Gamma { }; int main (int argc, char **argv) { A *a = new B(42, 1729); B *b = (B *) a; A &ar = *b; B &br = (B&)ar; Derived derived; DoublyDerived doublyderived; Alpha *ad = &derived; Alpha *add = &doublyderived; return 0; /* breakpoint spot: casts.exp: 1 */ }