Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support des types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (obsolète en C++20)
 
 
constexpr explicit operator bool() const noexcept;
(1) (depuis C++23)
constexpr bool has_value() const noexcept;
(2) (depuis C++23)

Vérifie si *this représente une valeur attendue.

Valeur de retour

has_val

Notes

Un objet std::expected n'est jamais sans valeur. Si has_value() renvoie true , operator*() peut être utilisé pour accéder à la valeur attendue ; sinon, error() peut être utilisé pour accéder à la valeur inattendue.

Exemple

#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); // après la vérification, il est sûr d'utiliser l'opérateur*
    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")}) // appelle implicitement (1)
        std::println("{}", *result);
    else
        std::println("{}", result.error());
}

Sortie possible :

42
Invalid argument
Numerical result out of range

Voir aussi

accède à la valeur attendue
(fonction membre publique)
retourne la valeur inattendue
(fonction membre publique)
vérifie si l'objet contient une valeur
(fonction membre publique de std::optional<T> )