#include <memory>
struct Listener {};
struct TCP : public Listener {};
struct Domain : public Listener {};
struct A {};
struct Branch : public TCP, public A {};
struct DIAMOND : public TCP, public Domain {};
int main() {
std::unique_ptr<Listener> ptr;
ptr.reset(new TCP);
ptr.reset(new Domain);
ptr.reset(new Branch);
ptr.reset(new DIAMOND);
}
ICAgICNpbmNsdWRlIDxtZW1vcnk+CgogICAgc3RydWN0IExpc3RlbmVyIHt9OwogICAgc3RydWN0IFRDUCA6IHB1YmxpYyBMaXN0ZW5lciB7fTsKICAgIHN0cnVjdCBEb21haW4gOiBwdWJsaWMgTGlzdGVuZXIge307CiAgICBzdHJ1Y3QgQSB7fTsKICAgIHN0cnVjdCBCcmFuY2ggOiBwdWJsaWMgVENQLCBwdWJsaWMgQSB7fTsKICAgIHN0cnVjdCBESUFNT05EIDogcHVibGljIFRDUCwgcHVibGljIERvbWFpbiB7fTsKCiAgICBpbnQgbWFpbigpIHsKICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlzdGVuZXI+IHB0cjsKICAgICAgICBwdHIucmVzZXQobmV3IFRDUCk7CiAgICAgICAgcHRyLnJlc2V0KG5ldyBEb21haW4pOwogICAgICAgIHB0ci5yZXNldChuZXcgQnJhbmNoKTsKICAgICAgICBwdHIucmVzZXQobmV3IERJQU1PTkQpOwogICAgfQo=