std::experimental::scope_success<EF>:: scope_success
From cppreference.com
<
cpp
|
experimental
|
scope success
template
<
class
Fn
>
explicit scope_success ( Fn && fn ) noexcept ( /*see below*/ ) ; |
(1) | (library fundamentals TS v3) |
scope_success
(
scope_success
&&
other
)
noexcept
(
/*see below*/
)
;
|
(2) | (library fundamentals TS v3) |
scope_success
(
const
scope_success
&
)
=
delete
;
|
(3) | (library fundamentals TS v3) |
Creates a
scope_success
from a function, a function object or another
scope_success
.
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_success
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
.
This overload participates in overload resolution only if
std::
is_same_v
<
std::
remove_cvref_t
<
Fn
>
, scope_success
>
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
(
)
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_success
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 .
Parameters
fn | - |
function or function object used for initializing the stored
EF
|
other | - |
scope_success
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 & > )
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 > )
std:: is_nothrow_copy_constructible_v < EF > )
Example
This section is incomplete
Reason: no example |
See also
(
removed in C++20*
)
(C++17)
|
checks if exception handling is currently in progress
(function) |
makes the
scope_success
inactive
(public member function) |