38 requires std::convertible_to<Callable, ExitCallable>
39 explicit
scope_exit(ExitCallable&& on_exit) noexcept(noexcept(Callable{std::forward<ExitCallable>(on_exit)}))
40 : attached_{true}, on_exit_{std::forward<ExitCallable>(on_exit)} {}
42 template <std::invocable EntryCallable, std::invocable ExitCallable>
43 requires std::convertible_to<Callable, ExitCallable>
44 scope_exit(EntryCallable&& on_entry, ExitCallable&& on_exit)
noexcept(
45 noexcept(Callable{std::forward<ExitCallable>(on_exit)}))
46 : scope_exit{std::forward<ExitCallable>(on_exit)} {
47 std::forward<EntryCallable>(on_entry)();
50 scope_exit(
const scope_exit&) =
delete;
51 scope_exit(scope_exit&&) noexcept = delete;
59 scope_exit& operator=(
const scope_exit&) =
delete;
60 scope_exit& operator=(scope_exit&&) noexcept = delete;
62 void release() noexcept {