#include <iostream>
#include <memory>
using namespace std;
struct MyDeleter
{
void operator() (void *) const
{
cout << "Deleter called\n";
}
};
int main() {
typedef shared_ptr<void> S;
cout << "1\n";
{
S x(nullptr, MyDeleter());
cout << "2\n";
{
S y(x);
cout << "3\n";
}
cout << "4\n";
}
cout << "5\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IE15RGVsZXRlcgp7Cgl2b2lkIG9wZXJhdG9yKCkgKHZvaWQgKikgY29uc3QKCXsKCQljb3V0IDw8ICJEZWxldGVyIGNhbGxlZFxuIjsKCX0KfTsKCmludCBtYWluKCkgewoJdHlwZWRlZiBzaGFyZWRfcHRyPHZvaWQ+IFM7Cgljb3V0IDw8ICIxXG4iOwoJewoJCVMgeChudWxscHRyLCBNeURlbGV0ZXIoKSk7CgkJY291dCA8PCAiMlxuIjsKCQl7CgkJCVMgeSh4KTsKCQkJY291dCA8PCAiM1xuIjsKCQl9CgkJY291dCA8PCAiNFxuIjsKCX0KCWNvdXQgPDwgIjVcbiI7CglyZXR1cm4gMDsKfQ==