7 Concepts library [concepts.lib]

7.6 Callable concepts [concepts.lib.callable]

7.6.5 Concept Relation [concepts.lib.callable.relation]

template <class R, class T, class U> concept bool 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))).