16 #ifndef OPENKALMAN_COMPATIBILITY_CORE_CONCEPTS_HPP 17 #define OPENKALMAN_COMPATIBILITY_CORE_CONCEPTS_HPP 23 #ifdef __cpp_lib_concepts 25 using std::derived_from;
26 using std::convertible_to;
28 using std::signed_integral;
29 using std::unsigned_integral;
30 using std::floating_point;
31 using std::destructible;
32 using std::constructible_from;
33 using std::default_initializable;
34 using std::move_constructible;
35 using std::copy_constructible;
37 template<
typename T,
typename U>
39 same_as = std::is_same_v<T, U> and std::is_same_v<U, T>;
42 template<
typename Derived,
typename Base>
45 std::is_base_of_v<Base, Derived> and
46 std::is_convertible_v<const volatile Derived*, const volatile Base*>;
51 template<
typename From,
typename To,
typename =
void>
54 template<
typename From,
typename To>
55 struct convertible_to_impl<From, To,
std::void_t<decltype(static_cast<To>(std::declval<From>()))>> : std::true_type {};
59 template<
typename From,
typename To>
66 integral = std::is_integral_v<T>;
71 signed_integral = integral<T> and std::is_signed_v<T>;
76 unsigned_integral = integral<T> and not std::is_signed_v<T>;
81 floating_point = std::is_floating_point_v<T>;
84 template<
typename T,
typename...Args>
86 destructible = std::is_nothrow_destructible_v<T>;
89 template<
typename T,
typename...Args>
91 constructible_from = destructible<T> and std::is_constructible_v<T, Args...>;
96 template<
typename T,
typename =
void>
105 inline constexpr
bool 110 inline constexpr
bool 111 move_constructible = constructible_from<T, T> and convertible_to<T, T>;
115 inline constexpr
bool 117 move_constructible<T> and
118 constructible_from<T, T&> and convertible_to<T&, T> and
119 constructible_from<T, const T&> && convertible_to<const T&, T> and
120 constructible_from<T, const T> && convertible_to<const T, T>;
Definition: core-concepts.hpp:97
Definitions relating to the availability of c++ language features.
Definition: core-concepts.hpp:52
Definition: basics.hpp:55