# std::experimental::ranges::Relation

From cppreference.com
< cpp‎ | experimental‎ | ranges

Defined in header `<experimental/ranges/concepts>` |  |

template <class R, class T, class U>

concept bool Relation =
Predicate<R, T, T> &&
Predicate<R, U, U> &&
CommonReference<
const std::remove_reference_t<T>&,
const std::remove_reference_t<U>&> &&
Predicate<R,
ranges::common_reference_t<
const std::remove_reference_t<T>&,
const std::remove_reference_t<U>&>,
ranges::common_reference_t<
const std::remove_reference_t<T>&,
const std::remove_reference_t<U>&>> &&
Predicate<R, T, U> &&

Predicate<R, U, T>;

(1)

(ranges TS)

The concept `Relation<R, T, U>` specifies that `R` defines a binary relation over the set of expressions whose type and value category are those encoded by either `T` or `U`.

Given

- `r`, an expression such that decltype((r)) is `R`,
- `t`, an expression such that decltype((t)) is `T`,
- `u`, an expression such that decltype((u)) is `U`,

and let `C` be ranges::common_reference_t<const std::remove_reference_t<T>&, const std::remove_reference_t<U>&>,

then `Relation<R, T, U>` is satisfied only if

- bool(r(t, u)) == bool(r(C(t), C(u))) and
- bool(r(u, t)) == bool(r(C(u), C(t))).

Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/experimental/ranges/concepts/Relation&oldid=105796"