diff options
| author | Lexi Winter <lexi@le-fay.org> | 2025-06-21 12:27:20 +0100 |
|---|---|---|
| committer | Lexi Winter <lexi@le-fay.org> | 2025-06-21 12:27:20 +0100 |
| commit | 243d958df14b85788232aca623b83826115a5eb9 (patch) | |
| tree | d1f698296b053359a5563731cda8c51df9ab9a6c /modules/guard.ccm | |
| parent | 8a36eb498e1a1c2cf2e886356faa4ce67e52e874 (diff) | |
| download | nihil-243d958df14b85788232aca623b83826115a5eb9.tar.gz nihil-243d958df14b85788232aca623b83826115a5eb9.tar.bz2 | |
rename modules/ to nihil/
Diffstat (limited to 'modules/guard.ccm')
| -rw-r--r-- | modules/guard.ccm | 50 |
1 files changed, 0 insertions, 50 deletions
diff --git a/modules/guard.ccm b/modules/guard.ccm deleted file mode 100644 index 18c6d70..0000000 --- a/modules/guard.ccm +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This source code is released into the public domain. - */ - -module; - -#include <concepts> -#include <optional> -#include <utility> - -export module nihil:guard; - -namespace nihil { - -/* - * guard: invoke a callable when this object is destroyed; this is similar to - * scope_exit from the library fundamentals TS, which LLVM doesn't implement. - */ -export template<std::invocable F> -struct guard final { - // Initialise the guard with a callable we will invoke later. - guard(F func) : _func(std::move(func)) {} - - /* - * We are being destroyed, so call the callable. - * If the callable throws, std::terminate() will be called. - */ - ~guard() { - if (_func) - std::invoke(*_func); - } - - // Release the guard. This turns the destructor into a no-op. - void release() noexcept { - _func.reset(); - } - - // Not default-constructible or copyable. - guard() = delete; - guard(guard const &) = delete; - guard(guard &&) noexcept = delete; - guard &operator=(guard const &) = delete; - guard &operator=(guard &&) noexcept = delete; - -private: - // The callable to be invoked when we are destroyed. - std::optional<F> _func; -}; - -} // namespace nihil |
