#include <iostream>
#include <memory>
int main() {
std::weak_ptr<int> q;
{
std::shared_ptr<int> p = std::make_shared<int>(666);
std::cout << p.get() << " = " << *p << " (" << p.use_count() << ", expect 1)\n";
q = p;
std::cout << p.get() << " = " << *p << " (" << p.use_count() << ", expect 1)\n";
{
std::shared_ptr<int> r = p;
std::cout << p.get() << " = " << *p << " (" << p.use_count() << ", expect 2)\n";
}
std::cout << p.get() << " = " << *p << " (" << p.use_count() << ", expect 1)\n";
}
std::cout << "q is " << (q.expired() ? "expired, which is expected" : "NOT expired, which is unexpected\n");
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKaW50IG1haW4oKSB7CglzdGQ6OndlYWtfcHRyPGludD4gcTsKCQoJewoJCXN0ZDo6c2hhcmVkX3B0cjxpbnQ+IHAgPSBzdGQ6Om1ha2Vfc2hhcmVkPGludD4oNjY2KTsKCQlzdGQ6OmNvdXQgPDwgcC5nZXQoKSA8PCAiID0gIiA8PCAqcCA8PCAiICgiIDw8IHAudXNlX2NvdW50KCkgPDwgIiwgZXhwZWN0IDEpXG4iOwoJCXEgPSBwOwoJCXN0ZDo6Y291dCA8PCBwLmdldCgpIDw8ICIgPSAiIDw8ICpwIDw8ICIgKCIgPDwgcC51c2VfY291bnQoKSA8PCAiLCBleHBlY3QgMSlcbiI7CgkJewoJCQlzdGQ6OnNoYXJlZF9wdHI8aW50PiByID0gcDsKCQkJc3RkOjpjb3V0IDw8IHAuZ2V0KCkgPDwgIiA9ICIgPDwgKnAgPDwgIiAoIiA8PCBwLnVzZV9jb3VudCgpIDw8ICIsIGV4cGVjdCAyKVxuIjsKCQl9CgkJc3RkOjpjb3V0IDw8IHAuZ2V0KCkgPDwgIiA9ICIgPDwgKnAgPDwgIiAoIiA8PCBwLnVzZV9jb3VudCgpIDw8ICIsIGV4cGVjdCAxKVxuIjsKCX0KCXN0ZDo6Y291dCA8PCAicSBpcyAiIDw8IChxLmV4cGlyZWQoKSA/ICJleHBpcmVkLCB3aGljaCBpcyBleHBlY3RlZCIgOiAiTk9UIGV4cGlyZWQsIHdoaWNoIGlzIHVuZXhwZWN0ZWRcbiIpOwoJCglyZXR1cm4gMDsKfQ==