std::experimental::scope_success<EF>:: scope_success
From cppreference.net
<
cpp
|
experimental
|
scope success
|
template
<
class
Fn
>
explicit scope_success ( Fn && fn ) noexcept ( /*siehe unten*/ ) ; |
(1) | (Library Fundamentals TS v3) |
|
scope_success
(
scope_success
&&
other
)
noexcept
(
/*siehe unten*/
)
;
|
(2) | (Library Fundamentals TS v3) |
|
scope_success
(
const
scope_success
&
)
=
delete
;
|
(3) | (Library Fundamentals TS v3) |
Erstellt einen
scope_success
aus einer Funktion, einem Funktionsobjekt oder einem anderen
scope_success
.
1)
Initialisiert die Exit-Funktion mit einer Funktion oder einem Funktionsobjekt und initialisiert den Zähler für nicht abgefangene Ausnahmen als ob mit
std::
uncaught_exceptions
(
)
. Das konstruierte
scope_success
ist aktiv.
Wenn
Fn
kein Lvalue-Referenztyp ist und
std::
is_nothrow_constructible_v
<
EF, Fn
>
true
ist, wird das gespeicherte
EF
mit
std::
forward
<
Fn
>
(
fn
)
initialisiert; andernfalls wird es mit
fn
initialisiert.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn
std::
is_same_v
<
std::
remove_cvref_t
<
Fn
>
, scope_success
>
gleich
false
ist und
std::
is_constructible_v
<
EF, Fn
>
gleich
true
ist.
Das Programm ist fehlerhaft, wenn der Funktionsaufrufausdruck
fn
(
)
fehlerhaft ist.
Das Verhalten ist undefiniert, wenn der Aufruf von
fn
(
)
zu undefiniertem Verhalten führt, selbst wenn
fn
nicht aufgerufen wurde.
2)
Move-Konstruktor. Initialisiert den gespeicherten
EF
mit dem aus
other
und initialisiert den Zähler für nicht abgefangene Ausnahmen mit dem aus
other
. Das konstruierte
scope_success
ist aktiv genau dann, wenn
other
vor der Konstruktion aktiv war.
Wenn
std::
is_nothrow_move_constructible_v
<
EF
>
true
ist, initialisiert den gespeicherten
EF
(bezeichnet als
exitfun
) mit
std::
forward
<
EF
>
(
other.
exitfun
)
, andernfalls initialisiert es ihn mit
other.
exitfun
.
Nach erfolgreichem Move-Konstruktor wird
other.
release
(
)
aufgerufen und
other
wird inaktiv.
Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn
std::
is_nothrow_move_constructible_v
<
EF
>
true
ist oder
std::
is_copy_constructible_v
<
EF
>
true
ist.
Das Verhalten ist undefiniert, falls
-
std::
is_nothrow_move_constructible_v
<
EF
>
den Wert
true
hat und
EFdie Anforderungen von MoveConstructible nicht erfüllt, oder -
std::
is_nothrow_move_constructible_v
<
EF
>
den Wert
false
hat und
EFdie Anforderungen von CopyConstructible nicht erfüllt.
Inhaltsverzeichnis |
Parameter
| fn | - |
Funktion oder Funktionsobjekt zur Initialisierung des gespeicherten
EF
|
| other | - |
scope_success
von dem verschoben wird
|
Ausnahmen
Jede Ausnahme, die während der Initialisierung des gespeicherten
EF
geworfen wird.
1)
noexcept
Spezifikation:
noexcept
(
std::
is_nothrow_constructible_v
<
EF, Fn
>
||
std:: is_nothrow_constructible_v < EF, Fn & > )
std:: is_nothrow_constructible_v < EF, Fn & > )
2)
noexcept
Spezifikation:
noexcept
(
std::
is_nothrow_move_constructible_v
<
EF
>
||
std:: is_nothrow_copy_constructible_v < EF > )
std:: is_nothrow_copy_constructible_v < EF > )
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Siehe auch
|
(
removed in C++20*
)
(C++17)
|
prüft, ob aktuell eine Ausnahmebehandlung stattfindet
(Funktion) |
macht den
scope_success
inaktiv
(öffentliche Member-Funktion) |