Simple-Utility v2.3.1
Loading...
Searching...
No Matches
operators.hpp
Go to the documentation of this file.
1// Copyright Dominic Koepke 2019 - 2023.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at
4// https://www.boost.org/LICENSE_1_0.txt)
5
6// ReSharper disable CppClangTidyClangDiagnosticDocumentation
7#ifndef SL_CONCEPTS_OPERATORS_HPP
8#define SL_CONCEPTS_OPERATORS_HPP
9
10#pragma once
11
12#include <concepts>
13
14namespace sl::concepts
15{
35 template <class T1, class T2>
36 concept right_shiftable_with = requires(T1 lhs, T2 rhs)
37 {
38 { lhs >> rhs };
39 };
40
48 template <class T1, class T2, class TResult = std::remove_cvref_t<T1>>
49 concept right_shiftable_with_r = requires(T1 lhs, T2 rhs)
50 {
51 { lhs >> rhs } -> std::convertible_to<TResult>;
52 };
53
58 template <class T>
60
67 template <class T, class TResult = std::remove_cvref_t<T>>
69
75 template <class T1, class T2>
76 concept left_shiftable_with = requires(T1 lhs, T2 rhs)
77 {
78 { lhs << rhs };
79 };
80
88 template <class T1, class T2, class TResult = std::remove_cvref_t<T1>>
89 concept left_shiftable_with_r = requires(T1 lhs, T2 rhs)
90 {
91 { lhs << rhs } -> std::convertible_to<TResult>;
92 };
93
98 template <class T>
100
107 template <class T, class TResult = std::remove_cvref_t<T>>
109
115 template <class T1, class T2>
117
125 template <class T1, class T2, class TResult = std::remove_cvref_t<T1>>
127
132 template <class T>
134
141 template <class T, class TResult = std::remove_cvref_t<T>>
143
149 template <class T1, class T2>
150 concept right_shift_assignable_with = requires(T1 lhs, T2 rhs)
151 {
152 { lhs >>= rhs };
153 };
154
162 template <class T1, class T2, class TResult = std::remove_cvref_t<T1>&>
163 concept right_shift_assignable_with_r = requires(T1 lhs, T2 rhs)
164 {
165 { lhs >>= rhs } -> std::convertible_to<TResult>;
166 };
167
172 template <class T>
174
181 template <class T, class TResult = std::remove_cvref_t<T>&>
183
189 template <class T1, class T2>
190 concept left_shift_assignable_with = requires(T1 lhs, T2 rhs)
191 {
192 { lhs <<= rhs };
193 };
194
202 template <class T1, class T2, class TResult = std::remove_cvref_t<T1>&>
203 concept left_shift_assignable_with_r = requires(T1 lhs, T2 rhs)
204 {
205 { lhs <<= rhs } -> std::convertible_to<TResult>;
206 };
207
212 template <class T>
214
221 template <class T, class TResult = std::remove_cvref_t<T>&>
223
229 template <class T1, class T2>
231
239 template <class T1, class T2, class TResult = std::remove_cvref_t<T1>&>
242
247 template <class T>
249
256 template <class T, class TResult = std::remove_cvref_t<T>&>
258
264 template <class T1, class T2>
266
275 template <class T1, class T2, class TResult = std::remove_cvref_t<T1>, class TAssignResult = std::remove_cvref_t<T1>&>
278
283 template <class T>
285
293 template <class T, class TResult = std::remove_cvref_t<T>, class TAssignResult = std::remove_cvref_t<T>&>
295
310 template <class T>
311 concept complemented = requires(T t)
312 {
313 { ~t };
314 };
315
322 template <class T, class TResult = std::remove_cvref_t<T>>
323 concept complemented_r = requires(T t)
324 {
325 { ~t } -> std::convertible_to<TResult>;
326 };
327
333 template <class TLhs, class TRhs>
334 concept conjunctive_with = requires(TLhs lhs, TRhs rhs)
335 {
336 { lhs & rhs };
337 };
338
346 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
347 concept conjunctive_with_r = requires(TLhs lhs, TRhs rhs)
348 {
349 { lhs & rhs } -> std::convertible_to<TResult>;
350 };
351
356 template <class T>
358
365 template <class T, class TResult = std::remove_cvref_t<T>>
367
373 template <class TLhs, class TRhs>
374 concept conjunctive_assign_with = requires(TLhs lhs, TRhs rhs)
375 {
376 { lhs &= rhs };
377 };
378
386 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
387 concept conjunctive_assign_with_r = requires(TLhs lhs, TRhs rhs)
388 {
389 { lhs &= rhs } -> std::convertible_to<TResult>;
390 };
391
396 template <class T>
398
405 template <class T, class TResult = std::remove_cvref_t<T>&>
407
413 template <class TLhs, class TRhs>
414 concept disjunctive_with = requires(TLhs lhs, TRhs rhs)
415 {
416 { lhs | rhs };
417 };
418
426 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
427 concept disjunctive_with_r = requires(TLhs lhs, TRhs rhs)
428 {
429 { lhs | rhs } -> std::convertible_to<TResult>;
430 };
431
436 template <class T>
438
445 template <class T, class TResult = std::remove_cvref_t<T>>
447
453 template <class TLhs, class TRhs>
454 concept disjunctive_assign_with = requires(TLhs lhs, TRhs rhs)
455 {
456 { lhs |= rhs };
457 };
458
466 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
467 concept disjunctive_assign_with_r = requires(TLhs lhs, TRhs rhs)
468 {
469 { lhs |= rhs } -> std::convertible_to<TResult>;
470 };
471
476 template <class T>
478
485 template <class T, class TResult = std::remove_cvref_t<T>&>
487
493 template <class TLhs, class TRhs>
494 concept exclusive_disjunctive_with = requires(TLhs lhs, TRhs rhs)
495 {
496 { lhs ^ rhs };
497 };
498
506 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
507 concept exclusive_disjunctive_with_r = requires(TLhs lhs, TRhs rhs)
508 {
509 { lhs ^ rhs } -> std::convertible_to<TResult>;
510 };
511
516 template <class T>
518
525 template <class T, class TResult = std::remove_cvref_t<T>>
527
533 template <class TLhs, class TRhs>
534 concept exclusive_disjunctive_assign_with = requires(TLhs lhs, TRhs rhs)
535 {
536 { lhs ^= rhs };
537 };
538
546 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
547 concept exclusive_disjunctive_assign_with_r = requires(TLhs lhs, TRhs rhs)
548 {
549 { lhs ^= rhs } -> std::convertible_to<TResult>;
550 };
551
556 template <class T>
558
565 template <class T, class TResult = std::remove_cvref_t<T>&>
567
573 template <class TLhs, class TRhs>
577
585 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
589
594 template <class T>
598
605 template <class T, class TResult = std::remove_cvref_t<T>>
609
615 template <class TLhs, class TRhs>
619
627 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
631
636 template <class T>
640
647 template <class T, class TResult = std::remove_cvref_t<T>&>
651
657 template <class TLhs, class TRhs>
661
670 template <class TLhs,
671 class TRhs,
672 class TCombineResult = std::remove_cvref_t<TLhs>,
673 class TAssignResult = std::remove_cvref_t<TLhs>&>
677
682 template <class T>
686
694 template <class T, class TCombineResult = std::remove_cvref_t<T>, class TAssignResult = std::remove_cvref_t<T>&>
698
701 template <class T>
702 concept invertible = requires(T t)
703 {
704 { !t };
705 };
706
707 template <class T, class TResult = std::remove_cvref_t<T>>
708 concept invertible_r = requires(T t)
709 {
710 { !t } -> std::convertible_to<TResult>;
711 };
712
724 template <class T>
725 concept dereferencable = requires(T t) { *t; };
726
733 template <class T, class TReturn>
734 concept dereferencable_r = requires(T t)
735 {
736 { *t } -> std::convertible_to<TReturn>;
737 };
738
743 template <class T>
744 concept arrow_dereferencable = requires(T t) { t.operator ->(); };
745
752 template <class T, class TReturn>
753 concept arrow_dereferencable_r = requires(T t)
754 {
755 { t.operator ->() } -> std::convertible_to<TReturn>;
756 };
757
763 template <class T, class TIndex>
764 concept index_dereferencable = requires(T t, TIndex i) { t[i]; };
765
773 template <class T, class TIndex, class TReturn>
774 concept index_dereferencable_r = requires(T t, TIndex i)
775 {
776 { t[i] } -> std::convertible_to<TReturn>;
777 };
778
803 template <class T>
804 concept negate = requires(T t)
805 {
806 { -t };
807 };
808
815 template <class T, class TResult = std::remove_cvref_t<T>>
816 concept negate_r = requires(T t)
817 {
818 { -t } -> std::convertible_to<TResult>;
819 };
820
826 template <class TLhs, class TRhs>
827 concept plus_with = requires(TLhs lhs, TRhs rhs)
828 {
829 { lhs + rhs };
830 };
831
839 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
840 concept plus_with_r = requires(TLhs lhs, TRhs rhs)
841 {
842 { lhs + rhs } -> std::convertible_to<TResult>;
843 };
844
849 template <class T>
851
858 template <class T, class TResult = std::remove_cvref_t<T>>
860
866 template <class TLhs, class TRhs>
867 concept plus_assign_with = requires(TLhs lhs, TRhs rhs)
868 {
869 { lhs += rhs };
870 };
871
879 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
880 concept plus_assign_with_r = requires(TLhs lhs, TRhs rhs)
881 {
882 { lhs += rhs } -> std::convertible_to<TResult>;
883 };
884
889 template <class T>
891
898 template <class T, class TResult = std::remove_cvref_t<T>&>
900
906 template <class TLhs, class TRhs>
907 concept minus_with = requires(TLhs lhs, TRhs rhs)
908 {
909 { lhs - rhs };
910 };
911
919 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
920 concept minus_with_r = requires(TLhs lhs, TRhs rhs)
921 {
922 { lhs - rhs } -> std::convertible_to<TResult>;
923 };
924
929 template <class T>
931
938 template <class T, class TResult = std::remove_cvref_t<T>>
940
946 template <class TLhs, class TRhs>
947 concept minus_assign_with = requires(TLhs lhs, TRhs rhs)
948 {
949 { lhs -= rhs };
950 };
951
959 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
960 concept minus_assign_with_r = requires(TLhs lhs, TRhs rhs)
961 {
962 { lhs -= rhs } -> std::convertible_to<TResult>;
963 };
964
969 template <class T>
971
978 template <class T, class TResult = std::remove_cvref_t<T>&>
980
986 template <class TLhs, class TRhs>
987 concept multiplies_with = requires(TLhs lhs, TRhs rhs)
988 {
989 { lhs * rhs };
990 };
991
999 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
1000 concept multiplies_with_r = requires(TLhs lhs, TRhs rhs)
1001 {
1002 { lhs * rhs } -> std::convertible_to<TResult>;
1003 };
1004
1009 template <class T>
1011
1018 template <class T, class TResult = std::remove_cvref_t<T>>
1020
1026 template <class TLhs, class TRhs>
1027 concept multiplies_assign_with = requires(TLhs lhs, TRhs rhs)
1028 {
1029 { lhs *= rhs };
1030 };
1031
1039 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
1040 concept multiplies_assign_with_r = requires(TLhs lhs, TRhs rhs)
1041 {
1042 { lhs *= rhs } -> std::convertible_to<TResult>;
1043 };
1044
1049 template <class T>
1051
1058 template <class T, class TResult = std::remove_cvref_t<T>&>
1060
1066 template <class TLhs, class TRhs>
1067 concept divides_with = requires(TLhs lhs, TRhs rhs)
1068 {
1069 { lhs / rhs };
1070 };
1071
1079 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
1080 concept divides_with_r = requires(TLhs lhs, TRhs rhs)
1081 {
1082 { lhs / rhs } -> std::convertible_to<TResult>;
1083 };
1084
1089 template <class T>
1091
1098 template <class T, class TResult = std::remove_cvref_t<T>>
1100
1106 template <class TLhs, class TRhs>
1107 concept divides_assign_with = requires(TLhs lhs, TRhs rhs)
1108 {
1109 { lhs /= rhs };
1110 };
1111
1119 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
1120 concept divides_assign_with_r = requires(TLhs lhs, TRhs rhs)
1121 {
1122 { lhs /= rhs } -> std::convertible_to<TResult>;
1123 };
1124
1129 template <class T>
1131
1138 template <class T, class TResult = std::remove_cvref_t<T>&>
1140
1146 template <class TLhs, class TRhs>
1147 concept modulus_with = requires(TLhs lhs, TRhs rhs)
1148 {
1149 { lhs % rhs };
1150 };
1151
1159 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
1160 concept modulus_with_r = requires(TLhs lhs, TRhs rhs)
1161 {
1162 { lhs % rhs } -> std::convertible_to<TResult>;
1163 };
1164
1169 template <class T>
1171
1178 template <class T, class TResult = std::remove_cvref_t<T>>
1180
1186 template <class TLhs, class TRhs>
1187 concept modulus_assign_with = requires(TLhs lhs, TRhs rhs)
1188 {
1189 { lhs %= rhs };
1190 };
1191
1199 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
1200 concept modulus_assign_with_r = requires(TLhs lhs, TRhs rhs)
1201 {
1202 { lhs %= rhs } -> std::convertible_to<TResult>;
1203 };
1204
1209 template <class T>
1211
1218 template <class T, class TResult = std::remove_cvref_t<T>&>
1220
1226 template <class TLhs, class TRhs>
1231
1239 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>>
1244
1249 template <class T>
1251 && minus<T>
1252 && multiplies<T>
1253 && divides<T>;
1254
1261 template <class T, class TResult = std::remove_cvref_t<T>>
1266
1272 template <class TLhs, class TRhs>
1277
1285 template <class TLhs, class TRhs, class TResult = std::remove_cvref_t<TLhs>&>
1290
1295 template <class T>
1300
1307 template <class T, class TResult = std::remove_cvref_t<T>&>
1312
1318 template <class TLhs, class TRhs>
1322
1331 template <class TLhs,
1332 class TRhs,
1333 class TCombineResult = std::remove_cvref_t<TLhs>,
1334 class TAssignResult = std::remove_cvref_t<TLhs>&>
1338
1343 template <class T>
1347
1355 template <class T, class TCombineResult = std::remove_cvref_t<T>, class TAssignResult = std::remove_cvref_t<T>&>
1359
1361}
1362
1363#endif
Determines whether a type can be used on both sides of operator +=, -=, *= and /= expressions and if ...
Definition: operators.hpp:1308
Determines whether two types can be used in operator +=, -=, *= and /= expressions and if the return ...
Definition: operators.hpp:1286
Determines whether two types can be used in operator +=, -=, *= and /= expressions.
Definition: operators.hpp:1273
Determines whether a type can be used on both sides of operator +=, -=, *= and /= expressions.
Definition: operators.hpp:1296
Determines whether a type can be used on both sides of operator +, -, * and / expressions and if the ...
Definition: operators.hpp:1262
Determines whether two types can be used in operator +, -, * and / expressions and if the return type...
Definition: operators.hpp:1240
Determines whether two types can be used in operator +, -, * and / expressions.
Definition: operators.hpp:1227
Determines whether a type can be used on both sides of operator +, -, * and / expressions.
Definition: operators.hpp:1250
Determines whether a type can be used in operator -> expressions and if the return type is convertibl...
Definition: operators.hpp:753
Determines whether a type can be used in operator -> expressions.
Definition: operators.hpp:744
Determines whether the given type can be used on both sides of operator <<= and operator >>= statemen...
Definition: operators.hpp:257
Determines whether two types can be used in operator >>= and operator <<= statements and checks if th...
Definition: operators.hpp:240
Determines whether two types can be used in operator >>= and operator <<= statements.
Definition: operators.hpp:230
Determines whether the given type can be used on both sides of operator <<= and operator >>= statemen...
Definition: operators.hpp:248
Determines whether the given type can be used on both sides of operator >> and operator << statements...
Definition: operators.hpp:142
Determines whether two types can be used in operator >> and operator << statements and checks if the ...
Definition: operators.hpp:126
Determines whether two types can be used in operator >> and operator << statements.
Definition: operators.hpp:116
Determines whether the given type can be used on both sides of operator << and operator >> statements...
Definition: operators.hpp:133
Determines whether a type can be used in operator ~ expression and if the return type is convertible ...
Definition: operators.hpp:323
Determines whether a type can be used in operator ~ expression.
Definition: operators.hpp:311
Determines whether a type can be used on both sides of operator &= expressions and if the return type...
Definition: operators.hpp:406
Determines whether two types can be used in operator &= expressions and if the return type is convert...
Definition: operators.hpp:387
Determines whether two types can be used in operator &= expressions.
Definition: operators.hpp:374
Determines whether a type can be used on both sides of operator &= expressions.
Definition: operators.hpp:397
Determines whether a type can be used on both sides of operator & expressions and if the return type ...
Definition: operators.hpp:366
Determines whether two types can be used in operator & expressions and if the return type is converti...
Definition: operators.hpp:347
Determines whether two types can be used in operator & expressions.
Definition: operators.hpp:334
Determines whether a type can be used on both sides of operator & expressions.
Definition: operators.hpp:357
Determines whether a type can be used in unary operator * expressions and if the return type is conve...
Definition: operators.hpp:734
Determines whether a type can be used in unary operator * expressions.
Definition: operators.hpp:725
Determines whether a type can be used on both sides of operator |= expressions and if the return type...
Definition: operators.hpp:486
Determines whether two types can be used in operator |= expressions and if the return type is convert...
Definition: operators.hpp:467
Determines whether two types can be used in operator |= expressions.
Definition: operators.hpp:454
Determines whether a type can be used on both sides of operator |= expressions.
Definition: operators.hpp:477
Determines whether a type can be used on both sides of operator | expressions and if the return type ...
Definition: operators.hpp:446
Determines whether two types can be used in operator | expressions and if the return type is converti...
Definition: operators.hpp:427
Determines whether two types can be used in operator | expressions.
Definition: operators.hpp:414
Determines whether a type can be used on both sides of operator | expressions.
Definition: operators.hpp:437
Determines whether a type can be used on both sides of operator /= expressions and if the return type...
Definition: operators.hpp:1139
Determines whether two types can be used in operator /= expressions and if the return type is convert...
Definition: operators.hpp:1120
Determines whether two types can be used in operator /= expressions.
Definition: operators.hpp:1107
Determines whether a type can be used on both sides of operator /= expressions.
Definition: operators.hpp:1130
Determines whether a type can be used on both sides of operator / expressions and if the return type ...
Definition: operators.hpp:1099
Determines whether two types can be used in operator / expressions and if the return type is converti...
Definition: operators.hpp:1080
Determines whether two types can be used in operator / expressions.
Definition: operators.hpp:1067
Determines whether a type can be used on both sides of operator / expressions.
Definition: operators.hpp:1090
Determines whether a type can be used on both sides of operator ^= expressions and if the return type...
Definition: operators.hpp:566
Determines whether two types can be used in operator ^= expressions and if the return type is convert...
Definition: operators.hpp:547
Determines whether two types can be used in operator ^= expressions.
Definition: operators.hpp:534
Determines whether a type can be used on both sides of operator ^= expressions.
Definition: operators.hpp:557
Determines whether a type can be used on both sides of operator ^ expressions and if the return type ...
Definition: operators.hpp:526
Determines whether two types can be used in operator ^ expressions and if the return type is converti...
Definition: operators.hpp:507
Determines whether two types can be used in operator ^ expressions.
Definition: operators.hpp:494
Determines whether a type can be used on both sides of operator ^ expressions.
Definition: operators.hpp:517
Determines whether a type can be used on both sides of operator +, -, *, /, +=, -=,...
Definition: operators.hpp:1356
Determines whether two types can be used in operator +, -, *, /, +=, -=, *=, /= and unary - expressio...
Definition: operators.hpp:1335
Determines whether two types can be used in operator +, -, *, /, +=, -=, *=, /= and unary - expressio...
Definition: operators.hpp:1319
Determines whether a type can be used on both sides of operator +, -, *, /, +=, -=,...
Definition: operators.hpp:1344
Determines whether a type can be used on both sides of operator &, |, ^, &=, |=, ^= and ~ expressions...
Definition: operators.hpp:695
Determines whether two types can be used in operator &, |, ^, &=, |=, ^= and ~ expressions and if the...
Definition: operators.hpp:674
Determines whether two types can be used in operator &, |, ^, &=, |=, ^= and ~ expressions.
Definition: operators.hpp:658
Determines whether a type can be used on both sides of operator &, |, ^, &=, |=, ^= and ~ expressions...
Definition: operators.hpp:683
Determines whether the given type can be used on both sides of operator <<, >>, <<= and >>= statement...
Definition: operators.hpp:294
Determines whether two types can be used in operator <<, >>, <<= and >>= statements and checks if the...
Definition: operators.hpp:276
Determines whether two types can be used in operator <<, >>, <<= and >>= statements.
Definition: operators.hpp:265
Determines whether the given type can be used on both sides of operator <<, >>, <<= and >>= statement...
Definition: operators.hpp:284
Determines whether a type can be used in operator -> expressions and if the return type is convertibl...
Definition: operators.hpp:774
Determines whether a type can be used in operator [] expressions.
Definition: operators.hpp:764
Definition: operators.hpp:708
Definition: operators.hpp:702
Determines whether the given type can be used on both sides of operator <<= statements and checks if ...
Definition: operators.hpp:222
Determines whether two types can be used in operator <<= statements and checks if the return type is ...
Definition: operators.hpp:203
Determines whether two types can be used in operator <<= statements.
Definition: operators.hpp:190
Determines whether the given type can be used on both sides of operator <<= statements.
Definition: operators.hpp:213
Determines whether the given type can be used on both sides of operator << statements and checks if t...
Definition: operators.hpp:108
Determines whether two types can be used in operator << statements and checks if the return type is c...
Definition: operators.hpp:89
Determines whether two types can be used in operator << statements.
Definition: operators.hpp:76
Determines whether the given type can be used on both sides of operator << statements.
Definition: operators.hpp:99
Determines whether a type can be used on both sides of operator &=, |= and ^= expressions and if the ...
Definition: operators.hpp:648
Determines whether two types can be used in operator &=, |= and ^= expressions and if the return type...
Definition: operators.hpp:628
Determines whether two types can be used in operator &=, |= and ^= expressions.
Definition: operators.hpp:616
Determines whether a type can be used on both sides of operator &=, |= and ^= expressions.
Definition: operators.hpp:637
Determines whether a type can be used on both sides of operator &, | and ^ expressions and if the ret...
Definition: operators.hpp:606
Determines whether two types can be used in operator &, | amd ^ expressions and if the return type is...
Definition: operators.hpp:586
Determines whether two types can be used in operator &, | amd ^ expressions.
Definition: operators.hpp:574
Determines whether a type can be used on both sides of operator &, | and ^ expressions.
Definition: operators.hpp:595
Determines whether a type can be used on both sides of operator -= expressions and if the return type...
Definition: operators.hpp:979
Determines whether two types can be used in operator -= expressions and if the return type is convert...
Definition: operators.hpp:960
Determines whether two types can be used in operator -= expressions.
Definition: operators.hpp:947
Determines whether a type can be used on both sides of operator -= expressions.
Definition: operators.hpp:970
Determines whether a type can be used on both sides of operator - expressions and if the return type ...
Definition: operators.hpp:939
Determines whether two types can be used in operator - expressions and if the return type is converti...
Definition: operators.hpp:920
Determines whether two types can be used in operator - expressions.
Definition: operators.hpp:907
Determines whether a type can be used on both sides of operator - expressions.
Definition: operators.hpp:930
Determines whether a type can be used on both sides of operator %= expressions and if the return type...
Definition: operators.hpp:1219
Determines whether two types can be used in operator %= expressions and if the return type is convert...
Definition: operators.hpp:1200
Determines whether two types can be used in operator %= expressions.
Definition: operators.hpp:1187
Determines whether a type can be used on both sides of operator %= expressions.
Definition: operators.hpp:1210
Determines whether a type can be used on both sides of operator % expressions and if the return type ...
Definition: operators.hpp:1179
Determines whether two types can be used in operator % expressions and if the return type is converti...
Definition: operators.hpp:1160
Determines whether two types can be used in operator % expressions.
Definition: operators.hpp:1147
Determines whether a type can be used on both sides of operator % expressions.
Definition: operators.hpp:1170
Determines whether a type can be used on both sides of operator *= expressions and if the return type...
Definition: operators.hpp:1059
Determines whether two types can be used in operator *= expressions and if the return type is convert...
Definition: operators.hpp:1040
Determines whether two types can be used in operator *= expressions.
Definition: operators.hpp:1027
Determines whether a type can be used on both sides of operator *= expressions.
Definition: operators.hpp:1050
Determines whether a type can be used on both sides of operator * expressions and if the return type ...
Definition: operators.hpp:1019
Determines whether two types can be used in operator * expressions and if the return type is converti...
Definition: operators.hpp:1000
Determines whether two types can be used in operator * expressions.
Definition: operators.hpp:987
Determines whether a type can be used on both sides of operator * expressions.
Definition: operators.hpp:1010
Determines whether a type can be used in operator - expression and if the return type is convertible ...
Definition: operators.hpp:816
Determines whether a type can be used in operator - expression.
Definition: operators.hpp:804
Determines whether a type can be used on both sides of operator += expressions and if the return type...
Definition: operators.hpp:899
Determines whether two types can be used in operator += expressions and if the return type is convert...
Definition: operators.hpp:880
Determines whether two types can be used in operator += expressions.
Definition: operators.hpp:867
Determines whether a type can be used on both sides of operator += expressions.
Definition: operators.hpp:890
Determines whether a type can be used on both sides of operator + expressions and if the return type ...
Definition: operators.hpp:859
Determines whether two types can be used in operator + expressions and if the return type is converti...
Definition: operators.hpp:840
Determines whether two types can be used in operator + expressions.
Definition: operators.hpp:827
Determines whether a type can be used on both sides of operator + expressions.
Definition: operators.hpp:850
Determines whether the given type can be used on both sides of operator >>= statements and checks if ...
Definition: operators.hpp:182
Determines whether two types can be used in operator >>= statements and checks if the return type is ...
Definition: operators.hpp:163
Determines whether two types can be used in operator >>= statements.
Definition: operators.hpp:150
Determines whether the given type can be used on both sides of operator >>= statements.
Definition: operators.hpp:173
Determines whether the given type can be used on both sides of operator >> statements and checks if t...
Definition: operators.hpp:68
Determines whether two types can be used in operator >> statements and checks if the return type is c...
Definition: operators.hpp:49
Determines whether two types can be used in operator >> statements.
Definition: operators.hpp:36
Determines whether the given type can be used on both sides of operator >> statements.
Definition: operators.hpp:59
Definition: operators.hpp:15