65 template <
typename SS,
typename TT>
66 static auto eqTest(
unsigned) ->
decltype(std::declval<SS&>() == std::declval<TT>(), std::true_type());
68 template <
typename,
typename>
69 static auto eqTest(...) -> std::false_type;
71 template <
typename SS,
typename TT>
72 static auto neTest(
unsigned) ->
decltype(std::declval<SS&>() != std::declval<TT>(), std::true_type());
74 template <
typename,
typename>
75 static auto neTest(...) -> std::false_type;
77 template <
typename SS,
typename TT>
78 static auto ltTest(
unsigned) ->
decltype(std::declval<SS&>() < std::declval<TT>(), std::true_type());
80 template <
typename,
typename>
81 static auto ltTest(...) -> std::false_type;
83 template <
typename SS,
typename TT>
84 static auto leTest(
unsigned) ->
decltype(std::declval<SS&>() <= std::declval<TT>(), std::true_type());
86 template <
typename,
typename>
87 static auto leTest(...) -> std::false_type;
89 template <
typename SS,
typename TT>
90 static auto gtTest(
unsigned) ->
decltype(std::declval<SS&>() > std::declval<TT>(), std::true_type());
92 template <
typename,
typename>
93 static auto gtTest(...) -> std::false_type;
95 template <
typename SS,
typename TT>
96 static auto geTest(
unsigned) ->
decltype(std::declval<SS&>() >= std::declval<TT>(), std::true_type());
98 template <
typename,
typename>
99 static auto geTest(...) -> std::false_type;
101 template <
typename SS,
typename TT>
102 static auto mulTest(
unsigned) ->
decltype(std::declval<SS&>() * std::declval<TT&>(), std::true_type());
104 template <
typename,
typename>
105 static auto mulTest(...) -> std::false_type;
107 template <
typename SS>
108 static auto incTest(
unsigned) ->
decltype(std::declval<SS&>()++, std::true_type());
111 static auto incTest(...) -> std::false_type;
113 template <
typename SS>
114 static auto decTest(
unsigned) ->
decltype(std::declval<SS&>()--, std::true_type());
117 static auto decTest(...) -> std::false_type;
119 template <
typename SS,
typename TT>
120 static auto modTest(
unsigned) ->
decltype(std::declval<SS&>() % std::declval<TT&>(), std::true_type());
122 template <
typename,
typename>
123 static auto modTest(...) -> std::false_type;
126 static constexpr bool eq =
decltype(eqTest<S, T>(0U))::value;
127 static constexpr bool ne =
decltype(neTest<S, T>(0U))::value;
128 static constexpr bool lt =
decltype(ltTest<S, T>(0U))::value;
129 static constexpr bool le =
decltype(leTest<S, T>(0U))::value;
130 static constexpr bool gt =
decltype(gtTest<S, T>(0U))::value;
131 static constexpr bool ge =
decltype(geTest<S, T>(0U))::value;
132 static constexpr bool mul =
decltype(mulTest<S, T>(0U))::value;
133 static constexpr bool inc =
decltype(incTest<S>(0U))::value;
134 static constexpr bool dec =
decltype(decTest<S>(0U))::value;
135 static constexpr bool mod =
decltype(modTest<S, T>(0U))::value;
std::conditional_t< std::is_arithmetic_v< T >||shouldBePassedByValueV< T >, T, AddConstRef< T > > MaybeRef
returns 'const T&' or 'T' depending on the type
Definition class_helpers.h:46