16 #ifndef OPENKALMAN_LAYOUT_OF_HPP 17 #define OPENKALMAN_LAYOUT_OF_HPP 22 #ifndef __cpp_lib_concepts 25 template<
typename T,
typename =
void>
29 struct has_layout<T,
std::void_t<decltype(interface::indexible_object_traits<T>::layout)>> : std::true_type {};
42 template<
typename T,
typename =
void>
44 struct layout_of : std::integral_constant<Layout, Layout::none> {};
52 struct
layout_of<T,
std::enable_if_t<detail::has_layout<std::decay_t<T>>::value>>
54 : std::integral_constant<Layout, interface::indexible_object_traits<std::decay_t<T>>::layout> {};
66 #endif //OPENKALMAN_LAYOUT_OF_HPP Definition: indexible_object_traits.hpp:36
Definition: tuple_reverse.hpp:103
The root namespace for OpenKalman.
Definition: basics.hpp:34
The row dimension of a matrix, expression, or array.
Definition: layout_of.hpp:44
Definition: layout_of.hpp:26