table of contents
std::experimental::scope_fail::scope_fail(3) | C++ Standard Libary | std::experimental::scope_fail::scope_fail(3) |
NAME¶
std::experimental::scope_fail::scope_fail - std::experimental::scope_fail::scope_fail
Synopsis¶
template< class Fn >
explicit scope_fail( Fn&& fn ) noexcept(/*see (1) (library
fundamentals TS v3)
below*/);
scope_fail( scope_fail&& other ) noexcept(/*see (2) (library
fundamentals TS v3)
below*/);
scope_fail( const scope_fail& ) = delete; (3) (library
fundamentals TS v3)
Creates a scope_fail from a function, a function object or another
scope_fail.
1) Initializes the exit function with a function or function object, and
initializes
the counter of uncaught exceptions as if with std::uncaught_exceptions(). The
constructed scope_fail is active.
If Fn is not an lvalue reference type and
std::is_nothrow_constructible_v<EF, Fn> is
true, the stored EF is initialized with std::forward<Fn>(fn); otherwise
it is
initialized with fn.
If initialization of the stored EF throws an exception, calls fn().
This overload participates in overload resolution only if
std::is_same_v<std::remove_cvref_t<Fn>, scope_fail> is false and
std::is_constructible_v<EF, Fn> is true.
The program is ill-formed if function call expression fn() is ill-formed.
The behavior is undefined if calling fn() throws an exception or results in
undefined behavior, even if fn has not been called.
2) Move constructor. Initializes the stored EF with the one in other, and
initializes the counter of uncaught exceptions with the one in other. The
constructed scope_fail is active if and only if other is active before the
construction.
If std::is_nothrow_move_constructible_v<EF> is true, initializes stored
EF (denoted
by exitfun) with std::forward<EF>(other.exitfun), otherwise initializes
it with
other.exitfun.
After successful move construction, other.release() is called and other
becomes
inactive.
This overload participates in overload resolution only if
std::is_nothrow_move_constructible_v<EF> is true or
std::is_copy_constructible_v<EF>
is true.
The behavior is undefined if
* std::is_nothrow_move_constructible_v<EF> is true and EF does not meet
the
requirements of MoveConstructible, or
* std::is_nothrow_move_constructible_v<EF> is false and EF does not
meet the
requirements of CopyConstructible.
3) scope_fail is not CopyConstructible.
Parameters¶
fn - function or function object used for initializing the stored
EF
other - scope_fail to move from
Exceptions¶
Any exception thrown during the initialization of the stored EF.
1)
noexcept specification:
noexcept(std::is_nothrow_constructible_v<EF, Fn> ||
std::is_nothrow_constructible_v<EF, Fn&>)
2)
noexcept specification:
noexcept(std::is_nothrow_move_constructible_v<EF> ||
std::is_nothrow_copy_constructible_v<EF>)
Example¶
This section is incomplete
Reason: no example
See also¶
uncaught_exception
uncaught_exceptions checks if exception handling is currently in progress
(removed in C++20) (function)
(C++17)
release makes the scope_fail inactive
(public member function)
Categories:¶
* conditionally noexcept
* Todo no example
2024.06.10 | http://cppreference.com |