    #include <memory>

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

    int main() {
        std::unique_ptr<A> ptr;
        ptr.reset(new B);
        ptr.reset(new C);
        ptr.reset(new D);
    }
