value_or_error<T, U>

A customisable converter of ValueOrError<T, E> concept matching types. It must have the following form:

// `T` will be the destination basic_result or basic_outcome.
// `U` will be the decayed form of the `ValueOrError<T, E>` concept matching input type.
template <class T> struct value_or_error<T, U>
{
  // False to indicate that this converter wants `basic_result`/`basic_outcome` to reject all other `basic_result`
  static constexpr bool enable_result_inputs = false;
  // False to indicate that this converter wants `basic_outcome` to reject all other `basic_outcome`
  static constexpr bool enable_outcome_inputs = false;
  
  // `X` will be the raw input form of `U`. It must return a `T`.
  template<class X> constexpr T operator()(X &&v);
};

Overridable: By template specialisation into the convert namespace.

Default: If decayed X is same as U, concept ValueOrError<U> matches, X::value_type is void or is explicitly constructible to T::value_type, and X::error_type is void or is explicitly constructible to T::error_type, then operator()(X &&) is made available.

operator()(X &&v) tests if v.has_value() is true, if so then a T with successful value is returned, else a T with unsuccessful value. If the input type was void, a default constructed value is used for either, else a move/copy construction from the source is performed.

Namespace: OUTCOME_V2_NAMESPACE::convert

Header: <outcome/convert.hpp>