#include #include class Defer { std::stack> stk; public: ~Defer() { while (!stk.empty()) stk.top()(), stk.pop(); } Defer() = default; Defer(std::function f) { stk.push(f); } void operator()(std::function f) { stk.push(f); } };