7#ifndef SL_CONCEPTS_OPERATORS_HPP
8#define SL_CONCEPTS_OPERATORS_HPP
35 template <
class T1,
class T2>
48 template <
class T1,
class T2,
class TResult = std::remove_cvref_t<T1>>
51 { lhs >> rhs } -> std::convertible_to<TResult>;
67 template <
class T,
class TResult = std::remove_cvref_t<T>>
75 template <
class T1,
class T2>
88 template <
class T1,
class T2,
class TResult = std::remove_cvref_t<T1>>
91 { lhs << rhs } -> std::convertible_to<TResult>;
107 template <
class T,
class TResult = std::remove_cvref_t<T>>
115 template <
class T1,
class T2>
125 template <
class T1,
class T2,
class TResult = std::remove_cvref_t<T1>>
141 template <
class T,
class TResult = std::remove_cvref_t<T>>
149 template <
class T1,
class T2>
162 template <
class T1,
class T2,
class TResult = std::remove_cvref_t<T1>&>
165 { lhs >>= rhs } -> std::convertible_to<TResult>;
181 template <
class T,
class TResult = std::remove_cvref_t<T>&>
189 template <
class T1,
class T2>
202 template <
class T1,
class T2,
class TResult = std::remove_cvref_t<T1>&>
205 { lhs <<= rhs } -> std::convertible_to<TResult>;
221 template <
class T,
class TResult = std::remove_cvref_t<T>&>
229 template <
class T1,
class T2>
239 template <
class T1,
class T2,
class TResult = std::remove_cvref_t<T1>&>
256 template <
class T,
class TResult = std::remove_cvref_t<T>&>
264 template <
class T1,
class T2>
275 template <
class T1,
class T2,
class TResult = std::remove_cvref_t<T1>,
class TAssignResult = std::remove_cvref_t<T1>&>
293 template <
class T,
class TResult = std::remove_cvref_t<T>,
class TAssignResult = std::remove_cvref_t<T>&>
322 template <
class T,
class TResult = std::remove_cvref_t<T>>
325 { ~t } -> std::convertible_to<TResult>;
333 template <
class TLhs,
class TRhs>
346 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
349 { lhs & rhs } -> std::convertible_to<TResult>;
365 template <
class T,
class TResult = std::remove_cvref_t<T>>
373 template <
class TLhs,
class TRhs>
386 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
389 { lhs &= rhs } -> std::convertible_to<TResult>;
405 template <
class T,
class TResult = std::remove_cvref_t<T>&>
413 template <
class TLhs,
class TRhs>
426 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
429 { lhs | rhs } -> std::convertible_to<TResult>;
445 template <
class T,
class TResult = std::remove_cvref_t<T>>
453 template <
class TLhs,
class TRhs>
466 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
469 { lhs |= rhs } -> std::convertible_to<TResult>;
485 template <
class T,
class TResult = std::remove_cvref_t<T>&>
493 template <
class TLhs,
class TRhs>
506 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
509 { lhs ^ rhs } -> std::convertible_to<TResult>;
525 template <
class T,
class TResult = std::remove_cvref_t<T>>
533 template <
class TLhs,
class TRhs>
546 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
549 { lhs ^= rhs } -> std::convertible_to<TResult>;
565 template <
class T,
class TResult = std::remove_cvref_t<T>&>
573 template <
class TLhs,
class TRhs>
585 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
605 template <
class T,
class TResult = std::remove_cvref_t<T>>
615 template <
class TLhs,
class TRhs>
627 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
647 template <
class T,
class TResult = std::remove_cvref_t<T>&>
657 template <
class TLhs,
class TRhs>
670 template <
class TLhs,
672 class TCombineResult = std::remove_cvref_t<TLhs>,
673 class TAssignResult = std::remove_cvref_t<TLhs>&>
694 template <
class T,
class TCombineResult = std::remove_cvref_t<T>,
class TAssignResult = std::remove_cvref_t<T>&>
707 template <
class T,
class TResult = std::remove_cvref_t<T>>
710 { !t } -> std::convertible_to<TResult>;
733 template <
class T,
class TReturn>
736 { *t } -> std::convertible_to<TReturn>;
752 template <
class T,
class TReturn>
755 { t.operator ->() } -> std::convertible_to<TReturn>;
763 template <
class T,
class TIndex>
773 template <
class T,
class TIndex,
class TReturn>
776 { t[i] } -> std::convertible_to<TReturn>;
815 template <
class T,
class TResult = std::remove_cvref_t<T>>
818 { -t } -> std::convertible_to<TResult>;
826 template <
class TLhs,
class TRhs>
839 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
842 { lhs + rhs } -> std::convertible_to<TResult>;
858 template <
class T,
class TResult = std::remove_cvref_t<T>>
866 template <
class TLhs,
class TRhs>
879 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
882 { lhs += rhs } -> std::convertible_to<TResult>;
898 template <
class T,
class TResult = std::remove_cvref_t<T>&>
906 template <
class TLhs,
class TRhs>
919 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
922 { lhs - rhs } -> std::convertible_to<TResult>;
938 template <
class T,
class TResult = std::remove_cvref_t<T>>
946 template <
class TLhs,
class TRhs>
959 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
962 { lhs -= rhs } -> std::convertible_to<TResult>;
978 template <
class T,
class TResult = std::remove_cvref_t<T>&>
986 template <
class TLhs,
class TRhs>
999 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
1002 { lhs * rhs } -> std::convertible_to<TResult>;
1018 template <
class T,
class TResult = std::remove_cvref_t<T>>
1026 template <
class TLhs,
class TRhs>
1039 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
1042 { lhs *= rhs } -> std::convertible_to<TResult>;
1058 template <
class T,
class TResult = std::remove_cvref_t<T>&>
1066 template <
class TLhs,
class TRhs>
1079 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
1082 { lhs / rhs } -> std::convertible_to<TResult>;
1098 template <
class T,
class TResult = std::remove_cvref_t<T>>
1106 template <
class TLhs,
class TRhs>
1119 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
1122 { lhs /= rhs } -> std::convertible_to<TResult>;
1138 template <
class T,
class TResult = std::remove_cvref_t<T>&>
1146 template <
class TLhs,
class TRhs>
1159 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
1162 { lhs % rhs } -> std::convertible_to<TResult>;
1178 template <
class T,
class TResult = std::remove_cvref_t<T>>
1186 template <
class TLhs,
class TRhs>
1199 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
1202 { lhs %= rhs } -> std::convertible_to<TResult>;
1218 template <
class T,
class TResult = std::remove_cvref_t<T>&>
1226 template <
class TLhs,
class TRhs>
1239 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>>
1261 template <
class T,
class TResult = std::remove_cvref_t<T>>
1272 template <
class TLhs,
class TRhs>
1285 template <
class TLhs,
class TRhs,
class TResult = std::remove_cvref_t<TLhs>&>
1307 template <
class T,
class TResult = std::remove_cvref_t<T>&>
1318 template <
class TLhs,
class TRhs>
1331 template <
class TLhs,
1333 class TCombineResult = std::remove_cvref_t<TLhs>,
1334 class TAssignResult = std::remove_cvref_t<TLhs>&>
1355 template <
class T,
class TCombineResult = std::remove_cvref_t<T>,
class TAssignResult = std::remove_cvref_t<T>&>
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