we have defer at home:
#define GLUE_(a, b) a##b
#define GLUE(a, b) GLUE_(a, b)
template<typename Closure>
struct DeferStruct {
Closure c;
DeferStruct(Closure &&c) : c(std::move(c)) {}
~DeferStruct() { c(); }
};
#define defer [[gnu::nodebug]] DeferStruct GLUE(_defer_stmt_, __COUNTER__)= [&]