aboutsummaryrefslogtreecommitdiffstats
path: root/modules/guard.ccm
diff options
context:
space:
mode:
authorLexi Winter <lexi@le-fay.org>2025-06-21 12:27:20 +0100
committerLexi Winter <lexi@le-fay.org>2025-06-21 12:27:20 +0100
commit243d958df14b85788232aca623b83826115a5eb9 (patch)
treed1f698296b053359a5563731cda8c51df9ab9a6c /modules/guard.ccm
parent8a36eb498e1a1c2cf2e886356faa4ce67e52e874 (diff)
downloadnihil-243d958df14b85788232aca623b83826115a5eb9.tar.gz
nihil-243d958df14b85788232aca623b83826115a5eb9.tar.bz2
rename modules/ to nihil/
Diffstat (limited to 'modules/guard.ccm')
-rw-r--r--modules/guard.ccm50
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