Skip to content

Instantly share code, notes, and snippets.

@nothke
Created December 18, 2024 15:33
Show Gist options
  • Save nothke/1bb9806dde42c69a6ae9550b9c5475e5 to your computer and use it in GitHub Desktop.
Save nothke/1bb9806dde42c69a6ae9550b9c5475e5 to your computer and use it in GitHub Desktop.
Zig/Go/Odin-like defer macro for C/C++
#ifndef _DEFER_H
#define _DEFER_H
struct defer_dummy {};
template <class F> struct deferrer { F f; ~deferrer() { f(); } };
template <class F> deferrer<F> operator*(defer_dummy, F f) { return {f}; }
#define DEFER_(LINE) defer##LINE
#define DEFER(LINE) DEFER_(LINE)
#define defer const auto DEFER(__LINE__) = defer_dummy{} *[&]()
#endif //_DEFER_H
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment