#include <memory>
class MyClass
{
public:
static std::shared_ptr<MyClass> create() {
struct make_shared_enabler : public MyClass {};
return std::make_shared<make_shared_enabler>();
}
friend class std::shared_ptr<MyClass>;
private:
MyClass() {}
~MyClass() {}
};
int main() {
auto p = MyClass::create();
}
I2luY2x1ZGUgPG1lbW9yeT4KCmNsYXNzIE15Q2xhc3MKewpwdWJsaWM6CgogICAgc3RhdGljIHN0ZDo6c2hhcmVkX3B0cjxNeUNsYXNzPiBjcmVhdGUoKSB7CiAgICAgICAgc3RydWN0IG1ha2Vfc2hhcmVkX2VuYWJsZXIgOiBwdWJsaWMgTXlDbGFzcyB7fTsKICAgICAgICByZXR1cm4gc3RkOjptYWtlX3NoYXJlZDxtYWtlX3NoYXJlZF9lbmFibGVyPigpOwogICAgfQoKICAgIGZyaWVuZCBjbGFzcyBzdGQ6OnNoYXJlZF9wdHI8TXlDbGFzcz47CnByaXZhdGU6CiAgIE15Q2xhc3MoKSB7fQogICB+TXlDbGFzcygpIHt9Cn07CgppbnQgbWFpbigpIHsKICAgIGF1dG8gcCA9IE15Q2xhc3M6OmNyZWF0ZSgpOwp9