blob: bd80d8e35c533a803cd7d4cdf112250829e50e65 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
#pragma once
template <typename T, typename T2 = T>
concept impl_basic_op = requires(T a, T2 b) {
+a;
-a;
-b;
+b;
a + b;
a - b;
a* b;
a / b;
b + a;
b - a;
b* a;
b / a;
};
template <typename T, typename T2 = T>
concept impl_modulo = requires(T a, T2 b) {
a % b;
b % a;
};
template <typename T, typename T2 = T>
concept impl_bitwise_op = requires(T a, T2 b) {
~a;
~b;
a & b;
a | b;
a ^ b;
a << b;
a >> b;
b & a;
b | a;
b ^ a;
b << a;
b >> a;
};
template <typename T, typename T2 = T>
concept impl_arith_op =
impl_basic_op<T, T2> && impl_modulo<T, T2> && impl_bitwise_op<T, T2>;
|