16 Library introduction [library]

16.4 Method of description [description]

16.4.2 Other conventions [conventions]

16.4.2.1 Exposition-only functions [expos.only.func]

Several function templates defined in [language.support] through [thread] and [depr] are only defined for the purpose of exposition.
The declaration of such a function is followed by a comment ending in exposition only.
The following are defined for exposition only to aid in the specification of the library:
template<class T> constexpr decay_t<T> decay-copy(T&& v)
    noexcept(is_nothrow_convertible_v<T, decay_t<T>>)           // exposition only
  { return std::forward<T>(v); }

constexpr auto synth-three-way =
  []<class T, class U>(const T& t, const U& u)
    requires requires {
      { t < u } -> convertible_to<bool>;
      { u < t } -> convertible_to<bool>;
    }
  {
    if constexpr (three_way_comparable_with<T, U>) {
      return t <=> u;
    } else {
      if (t < u) return weak_ordering::less;
      if (u < t) return weak_ordering::greater;
      return weak_ordering::equivalent;
    }
  };

template<class T, class U=T>
using synth-three-way-result = decltype(synth-three-way(declval<T&>(), declval<U&>()));