16 #ifndef OPENKALMAN_COLLECTIONS_GETTABLE_HPP 17 #define OPENKALMAN_COLLECTIONS_GETTABLE_HPP 26 #ifndef __cpp_concepts 29 template<std::
size_t i,
typename T,
typename =
void,
typename =
void>
32 template<std::
size_t i,
typename T>
33 struct gettable_impl<i, T, std::enable_if_t<sized<T> and i < size_of_v<T>>, std::void_t<
34 typename std::tuple_element<i, std::decay_t<T>>::type,
35 decltype(internal::generalized_std_get<i>(std::declval<T&>()))>> : std::true_type {};
37 template<std::
size_t i,
typename T>
38 struct gettable_impl<i, T, std::enable_if_t<not sized<T>>, std::void_t<
39 typename std::tuple_element<i, std::decay_t<T>>::type,
40 decltype(internal::generalized_std_get<i>(std::declval<T&>()))>> : std::true_type {};
51 template<std::
size_t i,
typename T>
54 (not sized<T> or i < size_of_v<T>) and
55 requires {
typename std::tuple_element<i, std::decay_t<T>>::type;
56 internal::generalized_std_get<i>(std::declval<T&>()); };
64 #endif //OPENKALMAN_COLLECTIONS_GETTABLE_HPP Namespace for collections.
Definition: collections.hpp:27
constexpr bool gettable
T has an element i that is accessible by a get(...) function.
Definition: gettable.hpp:58
Definition for collections::size_of.
Definition for collections::sized.
Definition: gettable.hpp:30
Definitions relating to the availability of c++ language features.