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))).