std::unexpected
Definido en el archivo de encabezado <expected> | ||
template<class E > class unexpected; | (desde C++23) | |
La plantilla de clase std::unexpected
representa un valor no esperado almacenado en std::expected. En particular, std::expected tiene constructores con std::unexpected
como argumento único, lo que crea un objeto expected
que contiene un valor no esperado.
Un programa está mal formado si ejempla un unexpected
con un tipo que no es de objeto, un tipo array, una especialización de std::unexpected
o un tipo calificado por constvolatile.
Contenido |
[editar]Parámetros de plantilla
E | - | el tipo del valor no esperado. El tipo no debe ser un tipo array, un tipo que no sea de objeto, una especialización de std::unexpected o un tipo calificado por constvolatile. |
[editar]Funciones miembro
Construye el objeto unexpected . (función miembro pública) | |
(destructor) (implícitamente declarado) | Destruye el objeto unexpected , junto con el valor almacenado. (función miembro pública) |
operator= (implícitamente declarado) | Asigna el valor almacenado (función miembro pública) |
Accede al valor almacenado. (función miembro pública) | |
Intercambia el valor almacenado. (función miembro pública) |
[editar]Funciones miembro
(C++23) | compares el valor almacenado (plantilla de función) |
(C++23) | specializes the std::swap algorithm (plantilla de función) |
std::unexpected::unexpected
constexpr unexpected(const unexpected&)=default; | (1) | |
constexpr unexpected( unexpected&&)=default; | (2) | |
template<class Err = E > constexprexplicit unexpected( Err&& e ); | (3) | |
template<class... Args> constexprexplicit unexpected(std::in_place_t, Args&&... args); | (4) | |
template<class U, class... Args> constexprexplicit unexpected(std::in_place_t, | (5) | |
Construye un objeto std::unexpected
.
E
de std::forward<Err>(e). - Esta sobrecarga solo participa en la resolución de sobrecargas si
- std::is_same_v<std::remove_cvref_t<Err>, unexpected> es false, y
- std::is_same_v<std::remove_cvref_t<Err>, std::in_place_t> es false, y
- std::is_constructible_v<E, Err> es true.
E
de los argumentos std::forward<Args>(args).... - Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_constructible_v<E, Args...> es true.
E
de los argumentos il, std::forward<Args>(args).... - 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
e | - | 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
Lanza cualquier excepción lanzada por el constructor de E
.
std::unexpected::error
constexprconst E& error()const&noexcept; constexpr E& error()&noexcept; | ||
Devuelve una referencia al valor almacenado.
std::unexpected::swap
constexprvoid swap( unexpected& other )noexcept(std::is_nothrow_swappable_v<E>); | ||
Intercambia los valores almacenados, como si fuera usingstd::swap; swap(error(), other.error());.
El programa está mal formado si std::is_swappable_v<E> es false.
operator==(std::unexpected)
template<class E2 > friendconstexprbool operator==( unexpected& x, std::unexpected<E2>& y ); | ||
Compara los valores almacenados, como si fuera return x.error()== y.error().
Si la expresión x.error()== e.error() no está bien formada, o si su resultado no se puede convertir a bool, el programa está mal formado.
Esta función no es visible a una búsqueda no calificada o calificada, y puede encontrarse solamente mediante la búsqueda dependiente de argumento cuando std::unexpected<E>
es una clase asociada de los argumentos.
swap(std::unexpected)
friendconstexprvoid swap( unexpected& x, unexpected& y )noexcept(noexcept(x.swap(y))); | ||
Equivalente a x.swap(y).
Esta sobrecarga solo participa en la resolución de sobrecargas si std::is_swappable_v<E> es true.
Esta función no es visible a una búsqueda no calificada o calificada, y puede encontrarse solamente mediante la búsqueda dependiente de argumento cuando std::unexpected<E>
es una clase asociada de los argumentos.
[editar]Guías de deducción
template<class E > unexpected(E)-> unexpected<E>; | (desde C++23) | |
La guía de deducción se proporciona para unexpected para permitir la deducción del argumento del constructor.
[editar]Notas
Antes de C++17, el nombre std::unexpected denotaba la función llamada por el entorno de ejecución de C++ cuando se violaba una especificación de excepción dinámica..
[editar]Ejemplo
#include <expected>#include <iostream> enumclass error { compile_time_error, runtime_error }; [[nodiscard]]auto unexpected_runtime_error()->std::expected<int, error>{return std::unexpected(error::runtime_error);} int main(){std::expected<double, int> ex = std::unexpected(3); if(!ex)std::cout<<"ex contiene un valor de error\n"; if(ex == std::unexpected(3))std::cout<<"El valor del error es igual a 3\n"; constauto e = unexpected_runtime_error(); e.and_then([](constauto& e)->std::expected<int, error>{std::cout<<"and_then: "<<int(e);// no se imprimereturn{};}) .or_else([](constauto& e)->std::expected<int, error>{std::cout<<"or_else: "<<int(e);// imprime esta líneareturn{};});}
Salida:
ex contiene un valor de error El valor del error es igual a 3 or_else: 1
[editar]Véase también
Construye el objeto expected . (función miembro pública) | |
(C++23) | Compara objetos de tipo expected . (plantilla de función) |