#include <memory>
#include <iostream>
template< typename T, typename D>
class ptrptr_type {
using parent_type = std::unique_ptr<T, D>;
using pointer = typename parent_type::pointer;
parent_type* p;
pointer a;
ptrptr_type(const ptrptr_type& nocopy) = delete;
ptrptr_type& operator=(const ptrptr_type& nocopy) = delete;
public:
ptrptr_type (std::unique_ptr<T, D>& ptr) : p(&ptr), a(ptr.release()) {}
ptrptr_type(ptrptr_type&& mover) {p = mover.p; a = mover.a; mover.p = nullptr;}
ptrptr_type& operator=(ptrptr_type&& mover) {p = mover.p; a = mover.a; mover.p = nullptr; return *this;}
operator pointer*() {return &a;}
~ptrptr_type () {if (p) p->reset(a);}
};
template< typename T, typename D>
ptrptr_type<T,D> ptrptr(std::unique_ptr<T, D>& ptr) {return ptrptr_type<T, D>(ptr);}
void FuckingCOM ( int** cominitializegogo ) {delete *cominitializegogo; *cominitializegogo = new int(48);}
int main () {
std::unique_ptr<int> meow( new int(24) );
FuckingCOM ( ptrptr(meow) );
std::cout << *meow << std::endl;
}
I2luY2x1ZGUgPG1lbW9yeT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBEPgpjbGFzcyBwdHJwdHJfdHlwZSB7CiAgICB1c2luZyBwYXJlbnRfdHlwZSAgPSBzdGQ6OnVuaXF1ZV9wdHI8VCwgRD47CiAgICB1c2luZyBwb2ludGVyICAgICAgPSB0eXBlbmFtZSBwYXJlbnRfdHlwZTo6cG9pbnRlcjsKICAgIAogICAgcGFyZW50X3R5cGUqIHA7CiAgICBwb2ludGVyIGE7CiAgICBwdHJwdHJfdHlwZShjb25zdCBwdHJwdHJfdHlwZSYgbm9jb3B5KSA9IGRlbGV0ZTsKICAgIHB0cnB0cl90eXBlJiBvcGVyYXRvcj0oY29uc3QgcHRycHRyX3R5cGUmIG5vY29weSkgPSBkZWxldGU7CnB1YmxpYzoKICAgIHB0cnB0cl90eXBlIChzdGQ6OnVuaXF1ZV9wdHI8VCwgRD4mIHB0cikgOiBwKCZwdHIpLCBhKHB0ci5yZWxlYXNlKCkpIHt9CiAgICBwdHJwdHJfdHlwZShwdHJwdHJfdHlwZSYmIG1vdmVyKSB7cCA9IG1vdmVyLnA7IGEgPSBtb3Zlci5hOyBtb3Zlci5wID0gbnVsbHB0cjt9CiAgICBwdHJwdHJfdHlwZSYgb3BlcmF0b3I9KHB0cnB0cl90eXBlJiYgbW92ZXIpIHtwID0gbW92ZXIucDsgYSA9IG1vdmVyLmE7IG1vdmVyLnAgPSBudWxscHRyOyByZXR1cm4gKnRoaXM7fQogICAgb3BlcmF0b3IgcG9pbnRlciooKSB7cmV0dXJuICZhO30gICAgICAgICAgIAogICAgfnB0cnB0cl90eXBlICgpIHtpZiAocCkgcC0+cmVzZXQoYSk7fQp9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgRD4KcHRycHRyX3R5cGU8VCxEPiBwdHJwdHIoc3RkOjp1bmlxdWVfcHRyPFQsIEQ+JiBwdHIpIHtyZXR1cm4gcHRycHRyX3R5cGU8VCwgRD4ocHRyKTt9Cgp2b2lkIEZ1Y2tpbmdDT00gKCBpbnQqKiBjb21pbml0aWFsaXplZ29nbyApIHtkZWxldGUgKmNvbWluaXRpYWxpemVnb2dvOyAqY29taW5pdGlhbGl6ZWdvZ28gPSBuZXcgaW50KDQ4KTt9CgppbnQgbWFpbiAoKSB7ICAgIAogICAgc3RkOjp1bmlxdWVfcHRyPGludD4gbWVvdyggbmV3IGludCgyNCkgKTsgICAgCiAgICBGdWNraW5nQ09NICggcHRycHRyKG1lb3cpICk7ICAgIAogICAgc3RkOjpjb3V0IDw8ICptZW93IDw8IHN0ZDo6ZW5kbDsKfQ==