di 0.1.0
Loading...
Searching...
No Matches
relation.h
Go to the documentation of this file.
1#pragma once
2
4
5namespace di::concepts {
6template<typename F, typename... Args>
7concept Predicate = InvocableTo<F, bool, Args...>;
8
9template<typename R, typename T, typename U>
11
12template<typename R, typename T, typename U>
14
15namespace detail {
16 template<typename Cat>
17 concept StrictWeakOrderCategory = SameAs<Cat, strong_ordering> || SameAs<Cat, weak_ordering>;
18
19 template<typename Cat>
20 concept ComparisonCategory =
22
23 template<typename R, typename T, typename U>
24 concept InvocableToStrictWeakOrder = Invocable<R, T, U> && StrictWeakOrderCategory<meta::InvokeResult<R, T, U>>;
25
26 template<typename R, typename T, typename U>
27 concept InvocableToComparisonCategory = Invocable<R, T, U> && ComparisonCategory<meta::InvokeResult<R, T, U>>;
28}
29
30template<typename R, typename T, typename U = T>
31concept StrictWeakOrder = detail::InvocableToStrictWeakOrder<R, T, T> && detail::InvocableToStrictWeakOrder<R, T, U> &&
32 detail::InvocableToStrictWeakOrder<R, U, T> && detail::InvocableToStrictWeakOrder<R, U, U>;
33
34template<typename R, typename T, typename U = T>
36 detail::InvocableToComparisonCategory<R, T, T> && detail::InvocableToComparisonCategory<R, T, U> &&
37 detail::InvocableToComparisonCategory<R, U, T> && detail::InvocableToComparisonCategory<R, U, U>;
38}
Definition relation.h:13
Definition invoke.h:69
Definition invoke.h:58
Definition relation.h:7
Definition relation.h:10
Definition core.h:114
Definition relation.h:35
Definition relation.h:31
Definition any_storable.h:9