std::expected<T,E>::expected - cppreference.com
|
|
(1) | (desde C++23) |
|
|
(2) | (desde C++23) |
|
|
(3) | (desde C++23) |
|
|
(4) | (desde C++23) |
|
|
(5) | (desde C++23) |
|
|
(6) | (desde C++23) (T no es cv void) |
|
|
(7) | (desde C++23) |
|
|
(8) | (desde C++23) |
|
|
(9) | (desde C++23) (T no es cv void) |
|
|
(10) | (desde C++23) (T no es cv void) |
|
|
(11) | (desde C++23) (T es cv void) |
|
|
(12) | (desde C++23) |
|
|
(13) | (desde C++23) |
Construye un nuevo objeto expected.
1) Constructor por defecto. Si T no es (posiblemente calificada-cv void, construye un objeto que contiene un valor esperado, que es valor-inicializado.
Después de la construcción, has_value() devuelve true.
Esta sobrecarga solo participa en la resolución de sobrecargas si T es (posiblemente calificada-cv) void o std::is_default_constructible_v<T> es true.
2) Constructor de copia. Si other.has_value() es false, el nuevo objeto contiene un valor no esperado, que es directamente-inicializado a partir de other.error(). De lo contrario, si T no es (posiblemente calificada-cv void, el nuevo objeto contiene un valor esperado, que es directamente-inicializado a partir de *other.
Después de la construcción, has_value() es igual a other.has_value().
Este constructor se define como eliminado a menos que
- ya sea
Tes (posiblemente calificada-cv)void, ostd::is_copy_constructible_v<T>estrue, y std::is_copy_constructible_v<E>estrue.
Este constructor es trivial si
- ya sea
Tes (posiblemente calificada-cv)void, ostd::is_trivially_copy_constructible_v<T>estrue, y std::is_trivially_copy_constructible_v<E>estrue.
3) Constructor por movimiento. Si other.has_value() es false, el nuevo objeto contiene un valor no esperado, que es directamente-inicializado a partir de std::move(other.error()). De lo contrario, si T no es (posiblemente calificada-cv void, el nuevo objeto contiene un valor esperado, que es directamente-inicializado a partir de std::move(*other).
Después de la construcción, has_value() es igual a other.has_value().
Este constructor participa en la resolución de sobrecarga sólo si
- ya sea
Tes (posiblemente calificada-cv)void, ostd::is_move_constructible_v<T>estrue, y std::is_move_constructible_v<E>estrue.
Este constructor es trivial si
std::is_trivially_move_constructible_v<T>estrue, ystd::is_trivially_move_constructible_v<E>estrue.
4,5) Sea
UFstd::add_lvalue_reference_t<const U>para (4) yUpara (5), yGFconst G¶ (4) yGpara (5).
Si other.has_value() es false, el nuevo objeto contiene un valor no esperado, que es directamente-inicializado a partir de std::forward<GF>(other.error()). De lo contrario, si T no es (posiblemente calificada-cv void, el nuevo objeto contiene un valor esperado, que es directamente-inicializado a partir de std::forward<UF>(*other).
Después de la construcción, has_value() es igual a other.has_value().
Cada uno de estos constructores no participa en la resolución de sobrecarga a menos que se cumplan, respectivamente, las siguientes condiciones:
- Ya sea
Tes (posiblemente calificada-cv)void, ystd::is_void_v<U>estrue, ostd::is_constructible_v<T, UF>estrue.
std::is_constructible_v<E, GF>estrue.- Si
Tno es (posiblemente calificada-cvbool,Tno es construible o convertible a partir de cualquier expresión de tipo (posiblementeconst)std::expected<U, G>, es decir, los siguientes 8 valores son todosfalse:std::is_constructible_v<T, std::expected<U, G>&std::is_constructible_v<T, std::expected<U, G>std::is_constructible_v<T, const std::expected<U, G>&std::is_constructible_v<T, const std::expected<U, G>std::is_convertible_v<std::expected<U, G>&, T>std::is_convertible_v<std::expected<U, G>, T>std::is_convertible_v<const std::expected<U, G>&, T>std::is_convertible_v<const std::expected<U, G>, T>
std::unexpected<E>no es construible a partir de cualquier expresión de tipo (posiblementeconst)std::expected<U, G>, es decir, los siguientes 4 valores son todosfalse:std::is_constructible_v<std::unexpected<E>, std::expected<U, G>&std::is_constructible_v<std::unexpected<E>, std::expected<U, G>std::is_constructible_v<std::unexpected<E>, const std::expected<U, G>&std::is_constructible_v<std::unexpected<E>, const std::expected<U, G>
Estos constructores son explicit si std::is_convertible_v<UF, T> o std::is_convertible_v<GF, E> es false.
6) Construye un objeto que contiene un valor esperado, inicializado como si directamente-inicializando (pero no directamente-inicializando-por-lista) un objeto de tipo T con la expresión std::forward<U>(v).
Después de la construcción, has_value() devuelve true.
Este constructor no participa en la resolución de sobrecarga a menos que se cumplan las siguientes condiciones.:
Tno es (posiblemente calificada-cvvoid.std::is_same_v<std::remove_cvref_t<U>, std::in_place_t>esfalse.std::is_same_v<expected, std::remove_cvref_t<U>>esfalse.std::is_constructible_v<T, U>estrue.std::remove_cvref_t<U>no es una especialización destd::unexpected.- Si
Tes (posiblemente calificada-cv)bool,std::remove_cvref_t<U>no es una especialización destd::expected.
7,8) Sea GF const G& para (7) y G para (8).
Construye un objeto que contiene un valor no esperado, que es directamente-inicializado a partir de std::forward<GF>(e.error()).
Después de la construcción, has_value() devuelve false.
Estas sobrecargas solo participan en la resolución de sobrecargas si std::is_constructible_v<E, GF> es true.
9) Construye un objeto que contiene un valor esperado, que es directamente-inicializado a partir de los argumentos std::forward<Args>(args)....
Después de la construcción, has_value() devuelve true.
Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_constructible_v<T, Args...> es true.
10) Construye un objeto que contiene un valor esperado, que es directamente-inicializado a partir de los argumentos il, std::forward<Args>(args)....
Después de la construcción, has_value() devuelve true.
Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_constructible_v<T, std::initializer_list<U>&, Args...> es true.
11) Construye un objeto de tal manera que después de la construcción, has_value() devuelve true.
12) Construye un objeto que contiene un valor no esperado, que es directamente-inicializado a partir de los argumentos std::forward<Args>(args)....
Después de la construcción, has_value() devuelve false.
Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_constructible_v<E, Args...> es true.
13) Construye un objeto que contiene un valor no esperado, que es directamente-inicializado a partir de los argumentos il, std::forward<Args>(args)....
Después de la construcción, has_value() devuelve false.
Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_constructible_v<E, std::initializer_list<U>&, Args...> es true.
Parámetros
| other | - | Otro objeto expected cuyo valor contenido se copia.
|
| e | - | Objeto std::unexpected cuyo valor contenido se copia.
|
| v | - | Valor con el que inicializar el valor contenido. |
| args... | - | Argumentos con los que inicializar el valor contenido. |
| il | - | Lista de inicializadores con la que inicializar el valor contenido. |
Excepciones
1) Lanza cualquier excepción lanzada por el constructor de T.
Si T es (posiblemente calificada-cv) void,
2) Lanza cualquier excepción lanzada por el constructor de T o E.
3) Si T es (posiblemente calificada-cv) void,
De lo contrario,
Especificación
noexcept: (desde C++11)
|
|
||
4,5) Lanza cualquier excepción lanzada por el constructor de T o E.
6) Lanza cualquier excepción lanzada por el constructor de T.
7,8) Lanza cualquier excepción lanzada por el constructor de E.
9,10) Lanza cualquier excepción lanzada por el constructor de T.
12,13) Lanza cualquier excepción lanzada por el constructor de E.
Ejemplo
Informes de defectos
Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.
| ID | Aplicado a | Comportamiento según lo publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 3886 | C++23 | El argumento de plantilla por defecto de la sobrecarga (6) era T.
|
Se cambió a std::remove_cv_t<T>.
|