16 #ifndef OPENKALMAN_COLLECTIONS_SETTABLE_HPP 17 #define OPENKALMAN_COLLECTIONS_SETTABLE_HPP 26 #ifndef __cpp_concepts 29 template<std::
size_t i,
typename C,
typename =
void>
32 template<std::
size_t i,
typename C>
33 struct settable_impl1<i, C,
std::enable_if_t<sized<C>>> : std::bool_constant<(i < size_of_v<C>)> {};
35 template<std::size_t i, typename C, typename T, typename = void>
36 struct settable_impl2 : std::false_type {};
38 template<std::size_t i, typename C, typename T>
39 struct settable_impl2<i, C, T, std::void_t<
40 decltype(internal::generalized_std_get<i>(std::declval<C&>()) = std::declval<T>())>> : std::true_type {};
51 template<std::size_t i, typename C, typename T>
54 (not sized<C> or i < size_of_v<C>) and
55 requires(C& c, T t) { internal::generalized_std_get<i>(c) = t; };
57 constexpr bool gettable = detail::settable_impl1<i, C, T>::value and detail::settable_impl2<i, C, T>::value;
Namespace for collections.
Definition: collections.hpp:27
Definition: settable.hpp:30
Definition: tuple_reverse.hpp:103
Definition for collections::size_of.
Definition for collections::sized.
Definitions relating to the availability of c++ language features.