std::expected<T,E>::error_or - cppreference.com
From cppreference.com
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) |
Returns the unexpected value if it exists, otherwise returns default_value.
1) If std::is_copy_constructible_v<E> or std::is_convertible_v<G, E> is false, the program is ill-formed.
2) If std::is_move_constructible_v<E> or std::is_convertible_v<G, E> is false, the program is ill-formed.
Parameters
| default_value | - | the value to use in case *this does not contain an unexpected value
|
| Type requirements | ||
Return value
1) has_value() ? std::forward<G>(default_value) : error()
2) has_value() ? std::forward<G>(default_value) : std::move(error())
Example
#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'; } }
Possible output:
SHELL: /usr/bin/zsh (OK) OS: ERROR: Invalid argument
See also
| returns the unexpected value (public member function) [edit] |