#pragma once #include namespace HX { template class unique_proxy { public: unique_proxy(std::unique_ptr &a) : u(a), p(u.get()) {} ~unique_proxy() { u.reset(p); } typename std::unique_ptr::pointer *operator&() { return &p; } unique_proxy &operator~() { u.reset(); p = nullptr; return *this; } private: std::unique_ptr &u; typename std::unique_ptr::pointer p; }; template unique_proxy unique_tie(std::unique_ptr &u) { return unique_proxy(u); } } /* namespace */