16 #ifndef OPENKALMAN_STD_EXPOSITION_FEATURES_HPP 17 #define OPENKALMAN_STD_EXPOSITION_FEATURES_HPP 19 #include <type_traits> 30 constexpr std::decay_t<T> operator()(T&& t)
const noexcept {
return std::forward<T>(t); }
39 template<
typename T,
typename =
void>
62 inline constexpr
bool is_signed_integer_like = is_integer_like<T> and std::is_signed_v<T>;
65 inline constexpr
bool is_unsigned_integer_like = is_integer_like<T> and std::is_unsigned_v<T>;
105 #ifdef __cpp_concepts 107 concept boolean_testable_impl = std::convertible_to<B, bool>;
109 template<
typename B,
typename =
void>
116 template<
typename B,
typename =
void>
121 detail::boolean_testable_impl1<B>::value and detail::boolean_testable_impl1<decltype(not std::declval<B>())>::value>> : std::true_type {};
126 #ifdef __cpp_concepts 128 concept boolean_testable =
129 detail::boolean_testable_impl<B> and
130 requires (B&& b) { { not std::forward<B>(b) } -> detail::boolean_testable_impl; };
133 inline constexpr
bool boolean_testable =
142 #ifdef __cpp_concepts 143 template<
typename T,
typename U>
144 concept WeaklyEqualityComparableWith =
145 requires(
const std::remove_reference_t<T>& t,
const std::remove_reference_t<U>& u) {
146 { t == u } -> boolean_testable;
147 { t != u } -> boolean_testable;
148 { u == t } -> boolean_testable;
149 { u != t } -> boolean_testable;
154 template<
typename T,
typename U,
typename =
void>
157 template<
typename T,
typename U>
159 boolean_testable<decltype(std::declval<const std::remove_reference_t<T>&>() == std::declval<const std::remove_reference_t<U>&>())> and
160 boolean_testable<decltype(std::declval<const std::remove_reference_t<T>&>() != std::declval<const std::remove_reference_t<U>&>())> and
161 boolean_testable<decltype(std::declval<const std::remove_reference_t<U>&>() == std::declval<const std::remove_reference_t<T>&>())> and
162 boolean_testable<decltype(std::declval<const std::remove_reference_t<U>&>() != std::declval<const std::remove_reference_t<T>&>())>
163 >> : std::true_type {};
166 template<
typename T,
typename U>
167 inline constexpr
bool 176 #ifdef __cpp_concepts 177 template<
typename T,
typename U>
178 concept PartiallyOrderedWith =
179 requires(
const std::remove_reference_t<T>& t,
const std::remove_reference_t<U>& u) {
180 { t < u } -> boolean_testable;
181 { t > u } -> boolean_testable;
182 { t <= u } -> boolean_testable;
183 { t >= u } -> boolean_testable;
184 { u < t } -> boolean_testable;
185 { u > t } -> boolean_testable;
186 { u <= t } -> boolean_testable;
187 { u >= t } -> boolean_testable;
192 template<
typename T,
typename U,
typename =
void>
195 template<
typename T,
typename U>
197 OpenKalman::internal::boolean_testable<decltype(std::declval<const std::remove_reference_t<T>&>() < std::declval<const std::remove_reference_t<U>&>())> and
198 OpenKalman::internal::boolean_testable<decltype(std::declval<const std::remove_reference_t<T>&>() > std::declval<const std::remove_reference_t<U>&>())> and
199 OpenKalman::internal::boolean_testable<decltype(std::declval<const std::remove_reference_t<T>&>() <= std::declval<const std::remove_reference_t<U>&>())> and
200 OpenKalman::internal::boolean_testable<decltype(std::declval<const std::remove_reference_t<T>&>() >= std::declval<const std::remove_reference_t<U>&>())> and
201 OpenKalman::internal::boolean_testable<decltype(std::declval<const std::remove_reference_t<U>&>() < std::declval<const std::remove_reference_t<T>&>())> and
202 OpenKalman::internal::boolean_testable<decltype(std::declval<const std::remove_reference_t<U>&>() > std::declval<const std::remove_reference_t<T>&>())> and
203 OpenKalman::internal::boolean_testable<decltype(std::declval<const std::remove_reference_t<U>&>() <= std::declval<const std::remove_reference_t<T>&>())> and
204 OpenKalman::internal::boolean_testable<decltype(std::declval<const std::remove_reference_t<U>&>() >= std::declval<const std::remove_reference_t<T>&>())>
205 >> : std::true_type {};
208 template<
typename T,
typename U>
209 inline constexpr
bool Definition: exposition.hpp:110
Definition: exposition.hpp:155
Definition: exposition.hpp:117
Definition: exposition.hpp:40
Definition: exposition.hpp:27
Definitions relating to standard c++ library concepts.
Definition: exposition.hpp:193
Whether the argument is a specialization of std::initializer_list.
Definition: exposition.hpp:76
Definition: basics.hpp:48