Namespaces
Variants

std::expected<T,E>:: expected

From cppreference.net
Utilities library
(Anmerkung: Der bereitgestellte HTML-Code enthält keinen übersetzbaren Text, da alle Tags leer sind. Die Struktur bleibt unverändert, wie angefordert.)
Hauptvorlage
constexpr expected ( ) ;
(1) (seit C++23)
constexpr expected ( const expected & other ) ;
(2) (seit C++23)
constexpr expected ( expected && other ) noexcept ( /* siehe unten */ ) ;
(3) (seit C++23)
template < class U, class G >
constexpr expected ( const expected < U, G > & other ) ;
(4) (seit C++23)
(bedingt explizit)
template < class U, class G >
constexpr expected ( expected < U, G > && other ) ;
(5) (seit C++23)
(bedingt explizit)
template < class U = std:: remove_cv_t < T > >
constexpr explicit ( ! std:: is_convertible_v < U, T > ) expected ( U && v ) ;
(6) (seit C++23)
template < class G >

constexpr explicit ( ! std:: is_convertible_v < const G & , E > )

expected ( const std:: unexpected < G > & e ) ;
(7) (seit C++23)
template < class G >

constexpr explicit ( ! std:: is_convertible_v < G, E > )

expected ( std:: unexpected < G > && e ) ;
(8) (seit C++23)
template < class ... Args >
constexpr explicit expected ( std:: in_place_t , Args && ... args ) ;
(9) (seit C++23)
template < class U, class ... Args >

constexpr explicit
expected ( std:: in_place_t ,

std:: initializer_list < U > il, Args && ... args ) ;
(10) (seit C++23)
template < class ... Args >
constexpr explicit expected ( std:: unexpect_t , Args && ... args ) ;
(11) (seit C++23)
template < class U, class ... Args >

constexpr explicit
expected ( std:: unexpect_t ,

std:: initializer_list < U > il, Args && ... args ) ;
(12) (seit C++23)
void Partielle Spezialisierung
constexpr expected ( ) ;
(13) (seit C++23)
constexpr expected ( const expected & other ) ;
(14) (seit C++23)
constexpr expected ( expected && other )
noexcept ( std:: is_nothrow_move_constructible_v < E > ) ;
(15) (seit C++23)
template < class U, class G >

constexpr explicit ( ! std:: is_convertible_v < const G & , E > )

expected ( const expected < U, G > & other ) ;
(16) (seit C++23)
template < class U, class G >

constexpr explicit ( ! std:: is_convertible_v < G, E > )

expected ( expected < U, G > && other ) ;
(17) (seit C++23)
template < class G >

constexpr explicit ( ! std:: is_convertible_v < const G & , E > )

expected ( const std:: unexpected < G > & e ) ;
(18) (seit C++23)
template < class G >

constexpr explicit ( ! std:: is_convertible_v < G, E > )

expected ( std:: unexpected < G > && e ) ;
(19) (seit C++23)
constexpr explicit expected ( std:: in_place_t ) ;
(20) (seit C++23)
template < class ... Args >
constexpr explicit expected ( std:: unexpect_t , Args && ... args ) ;
(21) (seit C++23)
template < class U, class ... Args >

constexpr explicit
expected ( std:: unexpect_t ,

std:: initializer_list < U > il, Args && ... args ) ;
(22) (seit C++23)

Konstruiert ein neues expected -Objekt.

Inhaltsverzeichnis

Parameter

other - ein weiteres expected Objekt, dessen enthaltene Werte kopiert werden
e - std::unexpected Objekt, dessen enthaltene Werte kopiert werden
v - Wert, mit dem der enthaltene Wert initialisiert wird
args - Argumente, mit denen der enthaltene Wert initialisiert wird
il - Initialisierungsliste, mit der der enthaltene Wert initialisiert wird

Effekte

Primäre Template-Konstruktoren

Overload Initialisierungs-
methode
Initialisierer für... has_value()
nach Konstruktion
der erwartete Wert der unerwartete Wert
( 1 ) Wert (leer) - true
( 2 ) Direkte Initialisierung
(Nicht-Liste)
* other other. error ( ) other. has_value ( )
  • Falls true , initialisiert nur den erwarteten Wert.
  • Falls false , initialisiert nur den unerwarteten Wert.
( 3 ) std :: move ( * other ) std :: move ( other. error ( ) )
( 4 ) std:: forward < const U & >
( * other )
std:: forward < const G & >
( other. error ( ) )
( 5 ) std:: forward < U > ( * other ) std:: forward < G >
( other. error ( ) )
( 6 ) std:: forward < U > ( v ) - true
( 7 ) - std:: forward < const G & >
( e. error ( ) )
false
( 8 ) std:: forward < G > ( e. error ( ) )
( 9 ) std:: forward < Args > ( args ) ... - true
( 10 ) il,
std:: forward < Args > ( args ) ...
( 11 ) - std:: forward < Args > ( args ) ... false
( 12 ) il,
std:: forward < Args > ( args ) ...

void Partielle Spezialisierungskonstruktoren

Überladung Initialisierungsmethode Initialisierer für den unerwarteten Wert has_value() nach Konstruktion
( 13 ) N/A - true
( 14 ) Direkt (nicht-Liste) rhs. error ( ) other. has_value ( )
  • Falls false , initialisiert den unerwarteten Wert.
( 15 ) std :: move ( rhs. error )
( 16 ) std:: forward < const G & > ( rhs. error ( ) )
( 17 ) std:: forward < G > ( rhs. error ( ) )
( 18 ) std:: forward < const G & > ( e. error ( ) ) false
( 19 ) std:: forward < G > ( e. error ( ) )
( 20 ) N/A - true
( 21 ) Direkt (nicht-Liste) std:: forward < Args > ( args ) ... false
( 22 ) il, std:: forward < Args > ( args ) ...

Einschränkungen und ergänzende Informationen

Primäre Template-Konstruktoren

1) Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std:: is_default_constructible_v < T > true ist.
2) Dieser Konstruktor ist als gelöscht definiert, es sei denn std:: is_copy_constructible_v < T > und std:: is_copy_constructible_v < E > sind beide true .
Dieser Konstruktor ist trivial, wenn std:: is_trivially_copy_constructible_v < T > und std:: is_trivially_copy_constructible_v < E > beide true sind.
3) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_move_constructible_v < T > und std:: is_move_constructible_v < E > beide true sind.
Dieser Konstruktor ist trivial, wenn std:: is_trivially_move_constructible_v < T > und std:: is_trivially_move_constructible_v < E > beide true sind.
4,5) These overloads participate in overload resolution only if all following conditions are satisfied:
4) Dieser Konstruktor ist explicit , wenn std:: is_convertible_v < const U & , T > oder std:: is_convertible_v < const G & , E > false ist.
5) Dieser Konstruktor ist explicit , wenn std:: is_convertible_v < U, T > oder std:: is_convertible_v < G, E > false ist.
6) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn alle folgenden Bedingungen erfüllt sind:
7) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_constructible_v < E, const G & > true ist.
8) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_constructible_v < E, G > true ist.
9) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_constructible_v < T, Args... > true ist.
10) Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std:: is_constructible_v < T, std:: initializer_list < U > & , Args... > true ist.
11) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_constructible_v < E, Args... > true ist.
12) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_constructible_v < E, std:: initializer_list < U > & , Args... > true ist.

void Partielle Spezialisierungskonstruktoren

14) Dieser Konstruktor ist als gelöscht definiert, es sei denn std:: is_copy_constructible_v < E > ist true .
Dieser Konstruktor ist trivial, wenn std:: is_trivially_copy_constructible_v < E > true ist.
15) Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std:: is_move_constructible_v < E > true ist.
Dieser Konstruktor ist trivial, wenn std:: is_trivially_move_constructible_v < E > true ist.
16,17) Diese Überladungen nehmen nur dann an der Überladungsauflösung teil, wenn alle folgenden Bedingungen erfüllt sind:
18) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_constructible_v < E, const G & > true ist.
19) Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std:: is_constructible_v < E, G > true ist.
21) Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn std:: is_constructible_v < E, Args... > true ist.
22) Diese Überladung nimmt nur dann an der Überladungsauflösung teil, wenn std:: is_constructible_v < E, std:: initializer_list < U > & , Args... > gleich true ist.

Exceptions

Primäre Template-Konstruktoren

1) Wirft jede Ausnahme, die durch die Initialisierung des erwarteten Werts ausgelöst wird.
2) Wirft jede Ausnahme, die durch die Initialisierung des erwarteten oder unerwarteten Werts ausgelöst wird.
3) Wirft jede Ausnahme, die durch die Initialisierung des erwarteten oder unerwarteten Werts ausgelöst wird.
4,5) Wirft jede Ausnahme, die durch die Initialisierung des erwarteten oder unerwarteten Werts ausgelöst wird.
6) Wirft jede Ausnahme, die durch die Initialisierung des erwarteten Werts ausgelöst wird.
7,8) Wirft jede Ausnahme, die durch die Initialisierung des unerwarteten Werts ausgelöst wird.
9,10) Wirft jede Ausnahme, die durch die Initialisierung des erwarteten Werts ausgelöst wird.
11,12) Wirft jede Ausnahme, die durch die Initialisierung des unerwarteten Werts ausgelöst wird.

void Partielle Spezialisierungskonstruktoren

14-19) Wirft jede Ausnahme, die durch die Initialisierung des unerwarteten Werts ausgelöst wird.
21,22) Wirft jede Ausnahme, die durch die Initialisierung des unerwarteten Werts ausgelöst wird.

Beispiel

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3886 C++23 das Standard-Template-Argument von overload ( 6 ) war T geändert zu std:: remove_cv_t < T >

Siehe auch

(C++23)
dargestellt als ein unerwarteter Wert
(Klassen-Template)
In-Place-Konstruktions-Tag
(Tag)
In-Place-Konstruktions-Tag für unerwartete Werte in expected
(Tag)