A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://cplusplus.github.io/LWG/issue3973 below:

Monadic operations should be ADL-proof

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

-1- Let U be remove_cvref_t<invoke_result_t<F, decltype( **this (val))>>.

-2- […] -3- […] -4- Effects: Equivalent to:
if (has_value())
  return invoke(std::forward<F>(f), **thisval);
else
  return U(unexpect, error());
template<class F> constexpr auto and_then(F&& f) &&;
template<class F> constexpr auto and_then(F&& f) const &&;

-5- Let U be remove_cvref_t<invoke_result_t<F, decltype((std::move( **this val))>>.

-6- […] -7- […] -8- Effects: Equivalent to:
if (has_value())
  return invoke(std::forward<F>(f), std::move(**thisval));
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 &;

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

-10- Constraints: is_constructible_v<T, decltype( **this (val))> is true. -11- […] -12- Effects: Equivalent to:
if (has_value())
  return G(in_place, **thisval);
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 &&;

-13- Let G be remove_cvref_t<invoke_result_t<F, decltype(std::move(error()))>>.

-14- Constraints: is_constructible_v<T, decltype(std::move( **this val))> is true. -15- […] -16- Effects: Equivalent to:
if (has_value())
  return G(in_place, std::move(**thisval));
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 &;

-17- Let U be remove_cvref_t<invoke_result_t<F, decltype( **this (val))>>.

-18- […] -19- Mandates: U is a valid value type for expected. If is_void_v<U> is false, the declaration
U u(invoke(std::forward<F>(f), **thisval));

is well-formed.

-20- Effects:
  1. (20.1) — […]

  2. (20.2) — Otherwise, if is_void_v<U> is false, returns an expected<U, E> object whose has_val member is true and val member is direct-non-list-initialized with invoke(std::forward<F>(f), **this val).

  3. (20.3) — Otherwise, evaluates invoke(std::forward<F>(f), **this val) and then returns expected<U, E>().

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

-21- Let U be remove_cvref_t<invoke_result_t<F, decltype(std::move( **this val))>>.

-22- […] -23- Mandates: U is a valid value type for expected. If is_void_v<U> is false, the declaration
U u(invoke(std::forward<F>(f), std::move(**thisval)));

is well-formed.

-24- Effects:
  1. (24.1) — […]

  2. (24.2) — Otherwise, if is_void_v<U> is false, returns an expected<U, E> object whose has_val member is true and val member is direct-non-list-initialized with invoke(std::forward<F>(f), std::move( **this val)).

  3. (24.3) — Otherwise, evaluates invoke(std::forward<F>(f), std::move( **this val)) and then returns expected<U, E>().

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

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

-26- Constraints: is_constructible_v<T, decltype( **this (val))> is true. -27- Mandates: […] -28- Returns: If has_value() is true, expected<T, G>(in_place, **this val); otherwise, an expected<T, G> object whose has_val member is false and unex member is direct-non-list-initialized with invoke(std::forward<F>(f), error()).
template<class F> constexpr auto transform_error(F&& f) &&;
template<class F> constexpr auto transform_error(F&& f) const &&;

-29- Let G be remove_cvref_t<invoke_result_t<F, decltype(std::move(error()))>>.

-30- Constraints: is_constructible_v<T, decltype(std::move( **this val))> is true. -31- Mandates: […] -32- Returns: If has_value() is true, expected<T, G>(in_place, std::move( **this val)); otherwise, an expected<T, G> object whose has_val member is false and unex member is direct-non-list-initialized with invoke(std::forward<F>(f), std::move(error())).

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4