#include <iostream>
#include <memory>
int main() {
struct my_type
{
void poke() { std::cout << "poke\n"; }
};
typedef my_type* my_type_ptr;
struct my_deleter
{
typedef my_type_ptr pointer;
void operator()(my_type_ptr p) { delete p; }
};
typedef std::unique_ptr<my_type_ptr, my_deleter> my_unique_ptr;
my_unique_ptr x(new my_type);
x->poke();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKaW50IG1haW4oKSB7CiAgICBzdHJ1Y3QgbXlfdHlwZQogICAgewogICAgICAgIHZvaWQgcG9rZSgpIHsgc3RkOjpjb3V0IDw8ICJwb2tlXG4iOyB9CiAgICB9OwogICAgdHlwZWRlZiBteV90eXBlKiBteV90eXBlX3B0cjsKCiAgICBzdHJ1Y3QgbXlfZGVsZXRlcgogICAgewogICAgICAgIHR5cGVkZWYgbXlfdHlwZV9wdHIgcG9pbnRlcjsKICAgICAgICB2b2lkIG9wZXJhdG9yKCkobXlfdHlwZV9wdHIgcCkgeyBkZWxldGUgcDsgfQogICAgfTsKCiAgICB0eXBlZGVmIHN0ZDo6dW5pcXVlX3B0cjxteV90eXBlX3B0ciwgbXlfZGVsZXRlcj4gbXlfdW5pcXVlX3B0cjsKCiAgICBteV91bmlxdWVfcHRyIHgobmV3IG15X3R5cGUpOwogICAgeC0+cG9rZSgpOwogICAgCiAgICByZXR1cm4gMDsKfQ==