#pragma once // from: https://www.gingerbill.org/article/2015/08/19/defer-in-cpp/ #include struct privDefer { std::function f; privDefer(std::function f) : f(f) {} ~privDefer() { f(); } }; #define DEFER_1(x, y) x##y #define DEFER_2(x, y) DEFER_1(x, y) #define DEFER_3(x) DEFER_2(x, __COUNTER__) #define defer(code) auto DEFER_3(_defer_) = privDefer([&](){code;})