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
См. также
| возвращает значение типа unexpected (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/expected/error_or