#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;
}