[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:
- If has_value() is false, returnsexpected<U, E>(unexpect, error()).
- Otherwise, if is_void_v<U> is false, returns anexpected<U, E> object whose has_val member is true and_val_ member is direct-non-list-initialized withinvoke(std::forward<F>(f)).
- Otherwise, evaluates invoke(std::forward<F>(f)) and then returnsexpected<U, E>().
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:
- If has_value() is false, returnsexpected<U, E>(unexpect, std::move(error())).
- Otherwise, if is_void_v<U> is false, returns anexpected<U, E> object whose has_val member is true and_val_ member is direct-non-list-initialized withinvoke(std::forward<F>(f)).
- Otherwise, evaluates invoke(std::forward<F>(f)) and then returnsexpected<U, E>().
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())).