[expected.void.monadic] (original) (raw)

22 General utilities library [utilities]

22.8 Expected objects [expected]

22.8.7 Partial specialization of expected for void types [expected.void]

22.8.7.7 Monadic operations [expected.void.monadic]

template<class F> constexpr auto and_then(F&& f) &;template<class F> constexpr auto and_then(F&& f) const &;

Let U be remove_cvref_t<invoke_result_t<F>>.

Constraints: is_constructible_v<E, decltype(error())>> is true.

Mandates: U is a specialization of expected andis_same_v<U​::​error_type, E> is true.

Effects: Equivalent to:if (has_value()) return invoke(std::forward<F>(f));else return U(unexpect, error());

template<class F> constexpr auto and_then(F&& f) &&;template<class F> constexpr auto and_then(F&& f) const &&;

Let U be remove_cvref_t<invoke_result_t<F>>.

Constraints: is_constructible_v<E, decltype(std​::​move(error()))> is true.

Mandates: U is a specialization of expected andis_same_v<U​::​error_type, E> is true.

Effects: Equivalent to:if (has_value()) return invoke(std::forward<F>(f));else return U(unexpect, std::move(error()));

template<class F> constexpr auto or_else(F&& f) &;template<class F> constexpr auto or_else(F&& f) const &;

Let G be remove_cvref_t<invoke_result_t<F, decltype(error())>>.

Mandates: G is a specialization of expected andis_same_v<G​::​value_type, T> is true.

Effects: Equivalent to:if (has_value()) return G();else return invoke(std::forward<F>(f), error());

template<class F> constexpr auto or_else(F&& f) &&;template<class F> constexpr auto or_else(F&& f) const &&;

Let G beremove_cvref_t<invoke_result_t<F, decltype(std​::​move(error()))>>.

Mandates: G is a specialization of expected andis_same_v<G​::​value_type, T> is true.

Effects: Equivalent to:if (has_value()) return G();else return invoke(std::forward<F>(f), std::move(error()));

template<class F> constexpr auto transform(F&& f) &;template<class F> constexpr auto transform(F&& f) const &;

Let U be remove_cv_t<invoke_result_t<F>>.

Constraints: is_constructible_v<E, decltype(error())> is true.

Mandates: U is a valid value type for expected.

If is_void_v<U> isfalse, the declarationU u(invoke(std::forward<F>(f)));is well-formed.

Effects:

template<class F> constexpr auto transform(F&& f) &&;template<class F> constexpr auto transform(F&& f) const &&;

Let U be remove_cv_t<invoke_result_t<F>>.

Constraints: is_constructible_v<E, decltype(std​::​move(error()))> is true.

Mandates: U is a valid value type for expected.

If is_void_v<U> isfalse, the declarationU u(invoke(std::forward<F>(f)));is well-formed.

Effects:

template<class F> constexpr auto transform_error(F&& f) &;template<class F> constexpr auto transform_error(F&& f) const &;

Let G be remove_cv_t<invoke_result_t<F, decltype(error())>>.

Mandates: G is a valid template argument for unexpected ([expected.un.general]) and the declarationG g(invoke(std::forward<F>(f), error()));is well-formed.

Returns: If has_value() is true, expected<T, G>(); otherwise, anexpected<T, G> object whose has_val member is falseand unex member is direct-non-list-initialized withinvoke(std​::​forward<F>(f), error()).

template<class F> constexpr auto transform_error(F&& f) &&;template<class F> constexpr auto transform_error(F&& f) const &&;

Let G beremove_cv_t<invoke_result_t<F, decltype(std​::​move(error()))>>.

Mandates: G is a valid template argument for unexpected ([expected.un.general]) and the declarationG g(invoke(std::forward<F>(f), std::move(error())));is well-formed.

Returns: If has_value() is true, expected<T, G>(); otherwise, anexpected<T, G> object whose has_val member is falseand unex member is direct-non-list-initialized withinvoke(std​::​forward<F>(f), std​::​move(error())).