#include <iostream>
#include <memory>
#include <functional>
class I
{
public:
virtual void Release() = 0;
};
class IA: public I
{
public:
void Release() override
{
std::cout << "Released";
}
};
int main(int argc, char* argv[])
{
IA pRoot;
std::function<void(I*)> deleter{&I::Release};
std::unique_ptr<I, decltype(deleter)> lock(&pRoot, deleter);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIEkKewpwdWJsaWM6CiAgICB2aXJ0dWFsIHZvaWQgUmVsZWFzZSgpID0gMDsKfTsKCmNsYXNzIElBOiBwdWJsaWMgSQp7CnB1YmxpYzoKICAgIHZvaWQgUmVsZWFzZSgpIG92ZXJyaWRlCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJSZWxlYXNlZCI7CiAgICB9Cn07CgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKewogICAgSUEgcFJvb3Q7CiAgICBzdGQ6OmZ1bmN0aW9uPHZvaWQoSSopPiBkZWxldGVyeyZJOjpSZWxlYXNlfTsKICAgIHN0ZDo6dW5pcXVlX3B0cjxJLCBkZWNsdHlwZShkZWxldGVyKT4gbG9jaygmcFJvb3QsIGRlbGV0ZXIpOwogICAgcmV0dXJuIDA7Cn0=