# std::experimental::ranges::Relation

< cpp‎ | experimental‎ | ranges

定义于头文件 `<experimental/ranges/concepts>` |  |
template <class R, class T, class U> concept bool Relation = ranges::Predicate<R, T, T> && ranges::Predicate<R, U, U> && ranges::CommonReference< const std::remove_reference_t<T>&, const std::remove_reference_t<U>&> && ranges::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>&>> && ranges::Predicate<R, T, U> && ranges::Predicate<R, U, T>; | (1) | (范围 TS)

概念 `Relation<R, T, U>` 指定 `R` 在类型和值类别由 `T` 或 `U` 编码的表达式集合上定义二元关系。

给定

- `r` ，有 decltype((r)) 为 `R` 的表达式，
- `t` ，有 decltype((t)) 为 `T` 的表达式，
- `u` ，有 decltype((u)) 为 `U` 的表达式，

并令 `C` 为 ranges::common_reference_t<const std::remove_reference_t<T>&, const std::remove_reference_t<U>&> ，

则 `Relation<R, T, U>` 仅若

- bool(r(t, u)) == bool(r(C(t), C(u))) 且
- bool(r(u, t)) == bool(r(C(u), C(t)))

才得到满足