Spec-Zone.ru › C++

std::expected<T,E>::error_or

template< class G = E > 
constexpr E error_or( G&& default_value ) const&;
(1) (since C++23)
template< class G = E > 
constexpr E error_or( G&& default_value ) &&;
(2) (since C++23)

Возвращает значение типа unexpected, если оно существует, иначе возвращает default_value.

1) Если std::is_copy_constructible_v<E> или std::is_convertible_v<G, E> является false, программа некорректна.
2) Если std::is_move_constructible_v<E> или std::is_convertible_v<G, E> является false, программа некорректна.

Параметры

default_value - значение, используемое в случае, если *this не содержит значения типа unexpected
Требования к типам

Возвращаемое значение

1) has_value() ? std::forward<G>(default_value) : error()
2) has_value() ? std::forward<G>(default_value) : std::move(error())

Пример

#include <cstdlib>
#include <expected>
#include <iostream>
#include <string>
#include <system_error>

std::expected<const char*, std::string> try_getenv(const char* name)
{
    if (const char* env{std::getenv(name)})
        return env;
    return std::unexpected{std::make_error_code(std::errc::invalid_argument).message()};
}

int main()
{
    for (auto env : {"SHELL", "OS"})
    {
        const auto ex{try_getenv(env)};
        std::cout << env << ": " << ex.value_or("ERROR:") << ' ' << ex.error_or("(OK)") << '\n';
    }
}

Возможный вывод:

SHELL: /usr/bin/zsh (OK)
OS: ERROR: Invalid argument

См. также

error
возвращает значение типа unexpected
(открытая функция-член)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/expected/error_or

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API