ordinary functions (there should be no advice) on A: A::A() void A::f() void A::f() void A::g() void A::g() void A::h() on B: A::A() B::B() B::B() void B::f() void B::f() void B::f() void B::g() void B::g() void B::g() void B::h() on C: A::A() B::B() B::B() C::C() C::C() C::C() void C::f() void C::f() void C::f() void C::f() void C::g() void C::g() void C::g() void C::g() void C::h() on D: A::A() B::B() B::B() D::D() D::D() D::D() void D::f() void D::f() void D::f() void D::f() void D::g() void D::g() void D::g() void D::g() void D::h() D::~D() D::~D() D::~D() B::~B() B::~B() A::~A() C::~C() C::~C() C::~C() B::~B() B::~B() A::~A() B::~B() B::~B() A::~A() A::~A()