16 #ifndef OPENKALMAN_WRAPPABLE_HPP 17 #define OPENKALMAN_WRAPPABLE_HPP 24 template<
typename T, std::size_t...I>
25 constexpr
bool wrappable_impl(std::index_sequence<I...>) {
26 return ((dynamic_dimension<T, I> or has_untyped_index<T, I + 1>) and ...); }
28 #ifndef __cpp_concepts 29 template<
typename T,
typename =
void>
33 struct is_wrappable<T,
std::enable_if_t<indexible<T> and (index_count<T>::value >= 1)>>
34 : std::bool_constant<(detail::wrappable_impl<T>(std::make_index_sequence<index_count_v<T> - 1>{}))> {};
46 concept
wrappable = indexible<T> and (index_count_v<T> >= 1) and
47 (detail::wrappable_impl<T>(std::make_index_sequence<index_count_v<T> - 1>{}));
55 #endif //OPENKALMAN_WRAPPABLE_HPP constexpr bool wrappable
Specifies that every fixed-size index of T (other than potentially index 0) is euclidean.
Definition: wrappable.hpp:49
Definition: tuple_reverse.hpp:103
The root namespace for OpenKalman.
Definition: basics.hpp:34
Definition: wrappable.hpp:30