#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);
}
ICAgICNpbmNsdWRlIDxtZW1vcnk+CgogICAgc3RydWN0IEEge307CiAgICBzdHJ1Y3QgQiA6IHB1YmxpYyBBIHt9OwogICAgc3RydWN0IEMgOiBwdWJsaWMgQSB7fTsKICAgIHN0cnVjdCBEIDogcHVibGljIEMge307CgogICAgaW50IG1haW4oKSB7CiAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEE+IHB0cjsKICAgICAgICBwdHIucmVzZXQobmV3IEIpOwogICAgICAgIHB0ci5yZXNldChuZXcgQyk7CiAgICAgICAgcHRyLnJlc2V0KG5ldyBEKTsKICAgIH0K