Defined in header <concepts> | ||
---|---|---|
template <class R, class T, class U> concept Relation = std::Predicate<R, T, T> && std::Predicate<R, U, U> && std::CommonReference< const std::remove_reference_t<T>&, const std::remove_reference_t<U>&> && std::Predicate<R, std::common_reference_t< const std::remove_reference_t<T>&, const std::remove_reference_t<U>&>, std::common_reference_t< const std::remove_reference_t<T>&, const std::remove_reference_t<U>&>> && std::Predicate<R, T, U> && std::Predicate<R, U, T>; | (1) | (since C++20) |
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 std::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)))
.
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/concepts/Relation