Espacios de nombres
Variantes
Acciones

std::unexpected

De cppreference.com
< cpp‎ | utility‎ | expected
 
 
Biblioteca de servicios
 
 
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)
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,

                               std::initializer_list<U> il, Args&&... args);
(5)

Construye un objeto std::unexpected.

1,2) Constructor de copia/movimiento. Copia o mueve el valor almacenado, respectivamente.
3) Construye el valor almacenado, como si fuera por initialización directa de un valor de tipo E de std::forward<Err>(e).
4) Construye el valor almacenado, como si fuera por initialización directa de un valor de tipo E de los argumentos std::forward<Args>(args)....
5) Construye el valor almacenado, como si fuera por initialización directa de un valor de tipo E de los argumentos il, std::forward<Args>(args)....

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;
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)[editar]
(C++23)
Compara objetos de tipo expected.
(plantilla de función)[editar]
close