#include <iostream>
#include <memory>
using namespace std;
template<typename T>
struct MyShared : public std::shared_ptr<T>
{ };
struct X {
int n_;
X(int n) : n_(n) { }
~X() { cout << "~X " << n_ << "\n"; }
};
int main() {
MyShared<X> p;
p.reset(new X(3));
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IE15U2hhcmVkIDogcHVibGljIHN0ZDo6c2hhcmVkX3B0cjxUPgp7IH07IAoKc3RydWN0IFggewoJaW50IG5fOwoJWChpbnQgbikgOiBuXyhuKSB7IH0KCX5YKCkgeyBjb3V0IDw8ICJ+WCAiIDw8IG5fIDw8ICJcbiI7IH0KfTsKCmludCBtYWluKCkgewoJTXlTaGFyZWQ8WD4gcDsKCXAucmVzZXQobmV3IFgoMykpOwp9