#include <iostream>
#include <memory>
using namespace std;
class Foo
{
Foo() {}
public:
static std::shared_ptr<Foo> Make()
{
struct Bootstrap : public Foo
{
~Bootstrap()
{
std::cout << "Bootstrap dtor";
}
};
return std::make_shared<Bootstrap>();
}
void Print()
{
std::cout << "Hello, world!" << std::endl;
}
};
int main()
{
auto foo = Foo::Make();
foo->Print();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5Pgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgRm9vCnsKCUZvbygpIHt9CnB1YmxpYzoKCXN0YXRpYyBzdGQ6OnNoYXJlZF9wdHI8Rm9vPiBNYWtlKCkKCXsKCQlzdHJ1Y3QgQm9vdHN0cmFwIDogcHVibGljIEZvbwoJCXsKCQkJfkJvb3RzdHJhcCgpCgkJCXsKCQkJCXN0ZDo6Y291dCA8PCAiQm9vdHN0cmFwIGR0b3IiOwoJCQl9CgkJfTsKCQlyZXR1cm4gc3RkOjptYWtlX3NoYXJlZDxCb290c3RyYXA+KCk7Cgl9CgkKCXZvaWQgUHJpbnQoKQoJewoJCXN0ZDo6Y291dCA8PCAiSGVsbG8sIHdvcmxkISIgPDwgc3RkOjplbmRsOwoJfQp9OwoKaW50IG1haW4oKQp7CglhdXRvIGZvbyA9IEZvbzo6TWFrZSgpOwoJZm9vLT5QcmludCgpOwp9