22 General utilities library [utilities]
22.8.7 Partial specialization of expected for void types [expected.void]
constexpr explicit operator bool() const noexcept;
constexpr bool has_value() const noexcept;
constexpr void operator*() const noexcept;
Preconditions: 
has_value() is 
true. constexpr void value() const &;
Mandates: 
is_copy_constructible_v<E> is 
true. Throws: 
bad_expected_access(error()) if 
has_value() is 
false. constexpr void value() &&;
Mandates: 
is_copy_constructible_v<E> is 
true and
is_move_constructible_v<E> is 
true. Throws: 
bad_expected_access(std::move(error()))
if 
has_value() is 
false. constexpr const E& error() const & noexcept;
constexpr E& error() & noexcept;
Preconditions: 
has_value() is 
false. constexpr E&& error() && noexcept;
constexpr const E&& error() const && noexcept;
Preconditions: 
has_value() is 
false. Returns: 
std::move(unex). template<class G = E> constexpr E error_or(G&& e) const &;
Mandates: 
is_copy_constructible_v<E> is 
true and
is_convertible_v<G, E> is 
true. Returns: 
std::forward<G>(e) if 
has_value() is 
true,
error() otherwise
. template<class G = E> constexpr E error_or(G&& e) &&;
Mandates: 
is_move_constructible_v<E> is 
true and
is_convertible_v<G, E> is 
true. Returns: 
std::forward<G>(e) if 
has_value() is 
true,
std::move(error()) otherwise
.