std::experi...::scope_fail(3)

πŸ“¦ version 2024.07.05, in nixpkgs unstable, opensuse-leap 16.0

✨ NAME ✨

okay so this page is for std::experimental::scope_fail, and the manual name up top is std::experi...::scope_fail(3). Bestie, we're getting into scope-guard territory πŸ’…


🌸 Synopsis 🌸

Defined in header <experimental/scope>
template< class EF >                    (library fundamentals TS v3)
class scope_fail;

The class template scope_fail is a general-purpose scope guard intended to call its exit function when a scope is exited via an exception. It’s giving β€œI have one job, and that job happens when things go sideways” energy 😭

scope_fail is not CopyConstructible, CopyAssignable or MoveAssignable, however, it may be MoveConstructible if EF meets some requirements, which permits wrapping a scope_fail into another object.

A scope_fail may be either active β€” i.e. it calls its exit function on destruction β€” or inactive β€” i.e. it does nothing on destruction. A scope_fail is active after it’s constructed from an exit function.

A scope_fail can become inactive by calling release() on it either manually or automatically (by the move constructor). An inactive scope_fail may also be obtained by initializing with another inactive scope_fail. Once a scope_fail is inactive, it cannot become active again. No take-backs, no encore, periodt 🎀

A scope_fail effectively holds an EF and a bool flag indicating if it is active, along with a counter of uncaught exceptions used for detecting whether the destructor is called during stack unwinding.


πŸŽ€ Template parameters πŸŽ€

  • EF β€” type of stored exit function.

πŸ’– Type requirements πŸ’–

  • EF shall be either:
    • a Destructible FunctionObject type,
    • an lvalue reference to FunctionObject,
    • an lvalue reference to function.
  • Calling an lvalue of std::remove_reference_t<EF> with no argument shall be well-formed.

πŸ¦‹ Member functions πŸ¦‹

  • constructor β€” constructs a new scope_fail (public member function).
  • destructor β€” calls the exit function when the scope is exited via an exception if the scope_fail is active, then destroys the scope_fail (public member function).
  • operator= β€” scope_fail is not assignable β€” [deleted] (public member function).

🌈 Modifiers 🌈

  • release β€” makes the scope_fail inactive (public member function).

🧚 Deduction guides 🧚

The page says Deduction guides and then just leaves it there β€” mysterious, lowkey iconic, no extra details listed here ✨


πŸ’œ Notes πŸ’œ

Constructing a scope_fail of dynamic storage duration might lead to unexpected behavior.

Constructing a scope_fail from another scope_fail created in a different thread might also lead to unexpected behavior, since the count of uncaught exceptions obtained in different threads may be compared during the destruction.


πŸ“ Example πŸ“

This section is incomplete.

Reason: no example.


πŸ‘‘ See also πŸ‘‘

  • scope_exit β€” wraps a function object and invokes it on exiting the scope (class template).
  • scope_success β€” wraps a function object and invokes it on exiting the scope normally (class template).
  • default_delete β€” default deleter for unique_ptr (C++11) (class template).

🌟 Category 🌟

  • Todo no example

footer vibe, folded into a cute sign-off: source/version is http://cppreference.com, dated 2024.06.10 β€” bye bestie, stay scoped and stay slaying πŸ«ΆπŸ’–
πŸ“¦ where this page comes from