Namespaces
Variants

std::expected<T,E>::operator bool, std::expected<T,E>::has_value

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades del programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación a tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
 
constexpr explicit operator bool() const noexcept;
(1) (desde C++23)
constexpr bool has_value() const noexcept;
(2) (desde C++23)

Comprueba si *this representa un valor esperado.

Valor de retorno

has_val

Notas

Un std::expected nunca carece de valor. Si has_value() devuelve true , operator*() puede utilizarse para acceder al valor esperado; de lo contrario, error() puede utilizarse para acceder al valor inesperado.

Ejemplo

#include <charconv>
#include <concepts>
#include <cstdint>
#include <expected>
#include <print>
#include <string>
#include <string_view>
#include <system_error>
template<std::integral Int = int>
constexpr std::expected<Int, std::string> to_int(std::string_view str)
{
    Int value{};
    const auto [_, ec] = std::from_chars(str.data(), str.data() + str.size(), value);
    if (ec == std::errc())
        return value;
    return std::unexpected{std::move(std::make_error_code(ec).message())};
}
int main()
{
    if (auto result = to_int("42"); result.has_value())
        std::println("{}", *result); // después de la verificación es seguro usar operator*
    else
        std::println("{}", result.error());
    if (const auto result = to_int("not a number"); result)
        std::println("{}", *result);
    else
        std::println("{}", result.error());
    if (const auto result{to_int<std::int16_t>("32768")}) // llama implícitamente a (1)
        std::println("{}", *result);
    else
        std::println("{}", result.error());
}

Salida posible:

42
Invalid argument
Numerical result out of range

Véase también

accede al valor esperado
(función miembro pública)
devuelve el valor inesperado
(función miembro pública)
verifica si el objeto contiene un valor
(función miembro pública de std::optional<T> )