◐ Shell
clean mode source ↗

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]