#include <utility>
#include <iostream>
#include <memory>
struct other
{
other(std::string const& foo) : m_foo(foo) {}
~other() { std::cout << "~other(" << m_foo << ")\n"; }
std::string m_foo;
};
int main()
{
std::shared_ptr<int> spi;
{
std::shared_ptr<std::pair<int, other> > spp = std::make_shared<std::pair<int, other> >(42, other("arg"));
spp->second.m_foo = "shared_ptr copy";
spi = std::shared_ptr<int>(spp, &(spp->first));
}
std::cout << *spi << "\n";
std::cout << "resetting spi...\n";
spi.reset();
std::cout << "done.\n";
}
I2luY2x1ZGUgPHV0aWxpdHk+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPG1lbW9yeT4KCnN0cnVjdCBvdGhlcgp7CiAgICBvdGhlcihzdGQ6OnN0cmluZyBjb25zdCYgZm9vKSA6IG1fZm9vKGZvbykge30KICAgIH5vdGhlcigpIHsgc3RkOjpjb3V0IDw8ICJ+b3RoZXIoIiA8PCBtX2ZvbyA8PCAiKVxuIjsgfQogICAgc3RkOjpzdHJpbmcgbV9mb287Cn07CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6c2hhcmVkX3B0cjxpbnQ+IHNwaTsKCiAgICB7CiAgICAgICAgc3RkOjpzaGFyZWRfcHRyPHN0ZDo6cGFpcjxpbnQsIG90aGVyPiA+IHNwcCA9IHN0ZDo6bWFrZV9zaGFyZWQ8c3RkOjpwYWlyPGludCwgb3RoZXI+ID4oNDIsIG90aGVyKCJhcmciKSk7CiAgICAgICAgc3BwLT5zZWNvbmQubV9mb28gPSAic2hhcmVkX3B0ciBjb3B5IjsKICAgICAgICBzcGkgPSBzdGQ6OnNoYXJlZF9wdHI8aW50PihzcHAsICYoc3BwLT5maXJzdCkpOwogICAgfQoKICAgIHN0ZDo6Y291dCA8PCAqc3BpIDw8ICJcbiI7CiAgICBzdGQ6OmNvdXQgPDwgInJlc2V0dGluZyBzcGkuLi5cbiI7CiAgICBzcGkucmVzZXQoKTsKICAgIHN0ZDo6Y291dCA8PCAiZG9uZS5cbiI7Cn0K