17 Concepts library [concepts]

17.7 Callable concepts [concepts.callable]

17.7.5 Concept Relation [concept.relation]

template<class R, class T, class U> concept Relation = Predicate<R, T, T> && Predicate<R, U, U> && CommonReference<const remove_reference_t<T>&, const remove_reference_t<U>&> && Predicate<R, common_reference_t<const remove_reference_t<T>&, const remove_reference_t<U>&>, common_reference_t<const remove_reference_t<T>&, const remove_reference_t<U>&>> && Predicate<R, T, U> && Predicate<R, U, T>;
Let
  • r be an expression such that decltype((r)) is R,
  • t be an expression such that decltype((t)) is T,
  • u be an expression such that decltype((u)) is U, and
  • C be
      common_reference_t<const remove_reference_t<T>&,
                         const remove_reference_t<U>&>
      
Relation<R, T, U> is satisfied only if
  • bool(r(t, u)) == bool(r(C(t), C(u))).
  • bool(r(u, t)) == bool(r(C(u), C(t))).