Namespaces
Variants

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

From cppreference.net
Utilities library
Plantilla principal
constexpr expected ( ) ;
(1) (desde C++23)
constexpr expected ( const expected & other ) ;
(2) (desde C++23)
constexpr expected ( expected && other ) noexcept ( /* ver más abajo */ ) ;
(3) (desde C++23)
template < class U, class G >
constexpr expected ( const expected < U, G > & other ) ;
(4) (desde C++23)
(explícito condicionalmente)
template < class U, class G >
constexpr expected ( expected < U, G > && other ) ;
(5) (desde C++23)
(condicionalmente explícito)
template < class U = std:: remove_cv_t < T > >
constexpr explicit ( ! std:: is_convertible_v < U, T > ) expected ( U && v ) ;
(6) (desde C++23)
template < class G >

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

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

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

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

constexpr explicit
expected ( std:: in_place_t ,

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

constexpr explicit
expected ( std:: unexpect_t ,

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

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

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

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

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

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

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

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

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

constexpr explicit
expected ( std:: unexpect_t ,

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

Construye un nuevo expected objeto.

Contenidos

Parámetros

other - otro objeto expected cuyo valor contenido es copiado
e - std::unexpected objeto cuyo valor contenido es copiado
v - valor con el cual inicializar el valor contenido
args - argumentos con los cuales inicializar el valor contenido
il - lista de inicialización con la cual inicializar el valor contenido

Efectos

Constructores de plantilla primaria

Sobrecarga Método de
inicialización
Inicializador para... has_value()
después de la construcción
el valor esperado el valor inesperado
( 1 ) Inicialización de valor (vacío) - true
( 2 ) Inicialización directa
(no lista)
* other other. error ( ) other. has_value ( )
  • Si true , solo inicializa el valor esperado.
  • Si false , solo inicializa el valor inesperado.
( 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 constructores de especialización parcial

Sobrecarga Método de inicialización Inicializador para el valor inesperado has_value() después de la construcción
( 13 ) N/A - true
( 14 ) Directa (no-lista) rhs. error ( ) other. has_value ( )
  • Si false , inicializa el valor inesperado.
( 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 ) Directa (no-lista) std:: forward < Args > ( args ) ... false
( 22 ) il, std:: forward < Args > ( args ) ...

Restricciones e información complementaria

Constructores de plantilla principal

1) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_default_constructible_v < T > es true .
2) Este constructor se define como eliminado a menos que std:: is_copy_constructible_v < T > y std:: is_copy_constructible_v < E > sean ambos true .
Este constructor es trivial si std:: is_trivially_copy_constructible_v < T > y std:: is_trivially_copy_constructible_v < E > son ambos true .
3) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_move_constructible_v < T > y std:: is_move_constructible_v < E > son ambos true .
Este constructor es trivial si std:: is_trivially_move_constructible_v < T > y std:: is_trivially_move_constructible_v < E > son ambos true .
4,5) These overloads participate in overload resolution only if all following conditions are satisfied:
4) Este constructor es explicit si std:: is_convertible_v < const U & , T > o std:: is_convertible_v < const G & , E > es false .
5) Este constructor es explicit si std:: is_convertible_v < U, T > o std:: is_convertible_v < G, E > es false .
6) Esta sobrecarga participa en la resolución de sobrecarga solo si se cumplen todas las siguientes condiciones:
7) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < E, const G & > es true .
8) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < E, G > es true .
9) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < T, Args... > es true .
10) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < T, std:: initializer_list < U > & , Args... > es true .
11) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < E, Args... > es true .
12) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < E, std:: initializer_list < U > & , Args... > es true .

void constructores de especialización parcial

14) Este constructor se define como eliminado a menos que std:: is_copy_constructible_v < E > sea true .
Este constructor es trivial si std:: is_trivially_copy_constructible_v < E > es true .
15) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_move_constructible_v < E > es true .
Este constructor es trivial si std:: is_trivially_move_constructible_v < E > es true .
16,17) Estas sobrecargas participan en la resolución de sobrecarga solo si se satisfacen todas las siguientes condiciones:
18) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < E, const G & > es true .
19) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < E, G > es true .
21) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < E, Args... > es true .
22) Esta sobrecarga participa en la resolución de sobrecarga solo si std:: is_constructible_v < E, std:: initializer_list < U > & , Args... > es true .

Excepciones

Constructores de plantilla principal

1) Lanza cualquier excepción lanzada por la inicialización del valor esperado.
2) Lanza cualquier excepción lanzada por la inicialización del valor esperado o inesperado.
3) Lanza cualquier excepción lanzada por la inicialización del valor esperado o inesperado.
4,5) Lanza cualquier excepción lanzada por la inicialización del valor esperado o inesperado.
6) Lanza cualquier excepción lanzada por la inicialización del valor esperado.
7,8) Lanza cualquier excepción generada por la inicialización del valor inesperado.
9,10) Lanza cualquier excepción lanzada por la inicialización del valor esperado.
11,12) Lanza cualquier excepción generada por la inicialización del valor inesperado.

void constructores de especialización parcial

14-19) Lanza cualquier excepción generada por la inicialización del valor inesperado.
21,22) Lanza cualquier excepción generada por la inicialización del valor inesperado.

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 3886 C++23 el argumento de plantilla por defecto de overload ( 6 ) era T cambiado a std:: remove_cv_t < T >

Véase también

(C++23)
representado como un valor inesperado
(plantilla de clase)
etiqueta de construcción in situ
(etiqueta)
etiqueta de construcción in situ para valor inesperado en expected
(etiqueta)