Namespaces
Variants

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

From cppreference.net
Utilities library
Modèle principal
constexpr expected ( ) ;
(1) (depuis C++23)
constexpr expected ( const expected & other ) ;
(2) (depuis C++23)
constexpr expected ( expected && other ) noexcept ( /* voir ci-dessous */ ) ;
(3) (depuis C++23)
template < class U, class G >
constexpr expected ( const expected < U, G > & other ) ;
(4) (depuis C++23)
(conditionnellement explicite)
template < class U, class G >
constexpr expected ( expected < U, G > && other ) ;
(5) (depuis C++23)
(explicite conditionnellement)
template < class U = std:: remove_cv_t < T > >
constexpr explicit ( ! std:: is_convertible_v < U, T > ) expected ( U && v ) ;
(6) (depuis C++23)
template < class G >

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

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

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

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

constexpr explicit
expected ( std:: in_place_t ,

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

constexpr explicit
expected ( std:: unexpect_t ,

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

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

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

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

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

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

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

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

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

constexpr explicit
expected ( std:: unexpect_t ,

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

Construit un nouvel objet expected .

Table des matières

Paramètres

other - autre objet expected dont la valeur contenue est copiée
e - std::unexpected objet dont la valeur contenue est copiée
v - valeur avec laquelle initialiser la valeur contenue
args - arguments avec lesquels initialiser la valeur contenue
il - liste d'initialisation avec laquelle initialiser la valeur contenue

Effets

Constructeurs du modèle principal

**Note:** Le code HTML a été conservé intact tel que demandé. Aucune traduction n'a été effectuée sur : - Les balises HTML et leurs attributs - Le contenu dans les balises ` ` (qui équivalent à ` `) - Les termes spécifiques au C++ (`std::forward`, `const`, `error`, etc.) - La structure et le formatage d'origine **Note:** Aucune traduction n'a été effectuée car : - Tous les éléments se trouvent dans des balises ` `, `
` ou `` (implicites via les classes CSS pour le code C++)
- Le texte contient exclusivement du code C++ et des termes techniques qui ne doivent pas être traduits
- Les nombres et symboles ne nécessitent pas de traduction
- Les balises HTML et attributs ont été préservés intacts
**Note:** Aucune traduction n'a été effectuée car : - Le texte "std::forward (args)..." se trouve dans des balises ` ` (équivalent à ` `) - "true" est un terme spécifique C++ dans un contexte de code - Les autres éléments sont soit des nombres, soit des symboles qui ne nécessitent pas de traduction - Les balises HTML et attributs ont été préservés comme demandé
Surcharge Méthode
d'initialisation
Initialiseur pour... has_value()
après construction
la valeur attendue la valeur inattendue
( 1 ) Value (vide) - true
( 2 ) Initialisation directe
(non-liste)
* other other. error ( ) other. has_value ( )
  • Si true , initialise uniquement la valeur attendue.
  • Si false , initialise uniquement la valeur inattendue.
( 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 constructeurs de spécialisation partielle

Surcharge Méthode d'initialisation Initialiseur pour la valeur inattendue has_value() après construction
( 13 ) N/A - true
( 14 ) Direct (non-liste) rhs. error ( ) other. has_value ( )
  • Si false , initialise la valeur inattendue.
( 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 ) Direct (non-liste) std:: forward < Args > ( args ) ... false
( 22 ) il, std:: forward < Args > ( args ) ...

Contraintes et informations supplémentaires

Constructeurs du modèle principal

1) Cette surcharge participe à la résolution de surcharge seulement si std:: is_default_constructible_v < T > est true .
2) Ce constructeur est défini comme supprimé sauf si std:: is_copy_constructible_v < T > et std:: is_copy_constructible_v < E > sont tous deux true .
Ce constructeur est trivial si std:: is_trivially_copy_constructible_v < T > et std:: is_trivially_copy_constructible_v < E > sont tous deux true .
3) Cette surcharge participe à la résolution de surcharge uniquement si std:: is_move_constructible_v < T > et std:: is_move_constructible_v < E > sont tous deux true .
Ce constructeur est trivial si std:: is_trivially_move_constructible_v < T > et std:: is_trivially_move_constructible_v < E > sont tous deux true .
4,5) These overloads participate in overload resolution only if all following conditions are satisfied:
4) Ce constructeur est explicit si std:: is_convertible_v < const U & , T > ou std:: is_convertible_v < const G & , E > est false .
5) Ce constructeur est explicit si std:: is_convertible_v < U, T > ou std:: is_convertible_v < G, E > est false .
6) Cette surcharge participe à la résolution de surcharge uniquement si toutes les conditions suivantes sont satisfaites :
7) Cette surcharge participe à la résolution de surcharge seulement si std:: is_constructible_v < E, const G & > est true .
8) Cette surcharge participe à la résolution de surcharge uniquement si std:: is_constructible_v < E, G > est true .
9) Cette surcharge participe à la résolution de surcharge uniquement si std:: is_constructible_v < T, Args... > est true .
10) Cette surcharge participe à la résolution de surcharge seulement si std:: is_constructible_v < T, std:: initializer_list < U > & , Args... > est true .
11) Cette surcharge participe à la résolution de surcharge seulement si std:: is_constructible_v < E, Args... > est true .
12) Cette surcharge participe à la résolution de surcharge seulement si std:: is_constructible_v < E, std:: initializer_list < U > & , Args... > est true .

void constructeurs de spécialisation partielle

14) Ce constructeur est défini comme supprimé sauf si std:: is_copy_constructible_v < E > est true .
Ce constructeur est trivial si std:: is_trivially_copy_constructible_v < E > est true .
15) Cette surcharge participe à la résolution de surcharge uniquement si std:: is_move_constructible_v < E > est true .
Ce constructeur est trivial si std:: is_trivially_move_constructible_v < E > est true .
16,17) Ces surcharges participent à la résolution de surcharge seulement si toutes les conditions suivantes sont satisfaites :
18) Cette surcharge participe à la résolution de surcharge uniquement si std:: is_constructible_v < E, const G & > est true .
19) Cette surcharge participe à la résolution de surcharge uniquement si std:: is_constructible_v < E, G > est true .
21) Cette surcharge participe à la résolution de surcharge uniquement si std:: is_constructible_v < E, Args... > est true .
22) Cette surcharge participe à la résolution de surcharge seulement si std:: is_constructible_v < E, std:: initializer_list < U > & , Args... > est true .

Exceptions

Constructeurs du modèle principal

1) Lance toute exception levée par l'initialisation de la valeur attendue.
2) Lance toute exception levée par l'initialisation de la valeur attendue ou inattendue.
3) Lance toute exception levée par l'initialisation de la valeur attendue ou inattendue.
4,5) Lance toute exception levée par l'initialisation de la valeur attendue ou inattendue.
6) Lance toute exception levée par l'initialisation de la valeur attendue.
7,8) Lance toute exception levée par l'initialisation de la valeur inattendue.
9,10) Lance toute exception levée par l'initialisation de la valeur attendue.
11,12) Lance toute exception levée par l'initialisation de la valeur inattendue.

void constructeurs de spécialisation partielle

14-19) Lance toute exception levée par l'initialisation de la valeur inattendue.
21,22) Lance toute exception levée par l'initialisation de la valeur inattendue.

Exemple

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applicable à Comportement publié Comportement corrigé
LWG 3886 C++23 l'argument template par défaut de la surcharge ( 6 ) était T modifié en std:: remove_cv_t < T >

Voir aussi

(C++23)
représenté comme une valeur inattendue
(modèle de classe)
étiquette de construction en place
(étiquette)
étiquette de construction en place pour la valeur inattendue dans expected
(étiquette)