Namespaces
Variants

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

From cppreference.net
Utilities library
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.

Contenidos

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> )