#include <iostream>
#include <memory>
using namespace std;
class IArchive
{
public:
IArchive(){}
IArchive(IArchive const&) = delete;
IArchive& operator=(IArchive const&) = delete;
};
class ZipArchive : public IArchive
{
public:
ZipArchive(){}
ZipArchive(ZipArchive const&) = delete;
ZipArchive& operator=(ZipArchive const&) = delete;
};
int main() {
shared_ptr<IArchive> archive = static_pointer_cast<IArchive>(make_shared<ZipArchive>());
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgSUFyY2hpdmUKewpwdWJsaWM6CglJQXJjaGl2ZSgpe30KICAgIElBcmNoaXZlKElBcmNoaXZlIGNvbnN0JikgPSBkZWxldGU7IAogICAgSUFyY2hpdmUmIG9wZXJhdG9yPShJQXJjaGl2ZSBjb25zdCYpID0gZGVsZXRlOwp9OwoKY2xhc3MgWmlwQXJjaGl2ZSA6IHB1YmxpYyBJQXJjaGl2ZQp7CglwdWJsaWM6CglaaXBBcmNoaXZlKCl7fQogICAgWmlwQXJjaGl2ZShaaXBBcmNoaXZlIGNvbnN0JikgPSBkZWxldGU7IAogICAgWmlwQXJjaGl2ZSYgb3BlcmF0b3I9KFppcEFyY2hpdmUgY29uc3QmKSA9IGRlbGV0ZTsKfTsKCgppbnQgbWFpbigpIHsKCXNoYXJlZF9wdHI8SUFyY2hpdmU+IGFyY2hpdmUgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PElBcmNoaXZlPihtYWtlX3NoYXJlZDxaaXBBcmNoaXZlPigpKTsKCXJldHVybiAwOwp9