cMHN 1.2
C++ library for learning MHNs with pRC
Loading...
Searching...
No Matches
concepts.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-2-Clause
2
3#ifndef pRC_CORE_BASIC_CONCEPTS_H
4#define pRC_CORE_BASIC_CONCEPTS_H
5
6#include <concepts>
7
9
10namespace pRC
11{
12 template<class T, class U>
13 concept HasCommon = std::common_with<T, U>;
14
15 template<class T>
16 concept IsDefined = requires { sizeof(T); };
17
18 template<class T>
19 concept IsReference = std::is_reference_v<T>;
20
21 template<class T>
22 concept IsPointer = std::is_pointer_v<T>;
23
24 template<class T>
25 concept IsConst = std::is_const_v<T>;
26
27 template<class T, class U>
28 concept IsSame = std::same_as<T, U>;
29
30 template<class F, class... Args>
31 concept IsInvocable = std::invocable<F, Args...>;
32
33 template<class F, class... Args>
34 concept IsPredicate = std::predicate<F, Args...>;
35
36 template<class T, class... Args>
37 concept IsConstructible = std::constructible_from<T, Args...>;
38
39 template<class L, class R = L>
40 concept IsAssignable = requires { declval<L>() = declval<R>(); };
41
42 template<class F, class T>
43 concept IsConvertible = std::convertible_to<F, T>;
44
45 template<class D, class B>
46 concept IsDerivedFrom = std::derived_from<D, B>;
47
48 template<class B, class D>
50
51 template<class T>
52 concept IsStandardLayout = std::is_standard_layout_v<T>;
53
54 template<class T>
56
57 template<class T>
59
60 template<class T>
62
63 template<class T>
65
66 template<class T>
68
69 template<class T>
70 concept IsIntegral = !IsBool<T> && std::integral<T>;
71
72 template<class T>
73 concept IsSignedIntegral = IsIntegral<T> && std::is_signed_v<T>;
74
75 template<class T>
76 concept IsUnsignedIntegral = IsIntegral<T> && !std::is_signed_v<T>;
77
78 template<class T>
79 concept IsConstant = !IsReference<T> && requires {
80 {
81 []<class U, U V>(Constant<U, V> const &&)
82 {
83 }(std::declval<T>())
84 };
85 };
86
87}
88#endif // pRC_CORE_BASIC_CONCEPTS_H
Definition concepts.hpp:13
Definition concepts.hpp:40
Definition concepts.hpp:49
Definition concepts.hpp:58
Definition concepts.hpp:25
Definition concepts.hpp:79
Definition concepts.hpp:37
Definition concepts.hpp:43
Definition concepts.hpp:16
Definition concepts.hpp:46
Definition concepts.hpp:64
Definition concepts.hpp:70
Definition concepts.hpp:31
Definition concepts.hpp:22
Definition concepts.hpp:34
Definition concepts.hpp:19
Definition concepts.hpp:28
Definition concepts.hpp:67
Definition concepts.hpp:73
Definition concepts.hpp:61
Definition concepts.hpp:52
Definition concepts.hpp:76
Definition concepts.hpp:55
pRC::Float<> T
Definition externs_nonTT.hpp:1
Definition cholesky.hpp:10
std::uint32_t Seed
Definition basics.hpp:33
Size Index
Definition basics.hpp:32
std::size_t Size
Definition basics.hpp:31
void Void
Definition basics.hpp:28
std::integral_constant< T, V > Constant
Definition basics.hpp:38
Definition gtest_pred_impl_unittest.cc:54