29#ifndef ETL_PARAMETER_PACK
30#define ETL_PARAMETER_PACK
37#if ETL_CPP11_NOT_SUPPORTED
38 #if !defined(ETL_IN_UNIT_TEST)
39 #error NOT SUPPORTED FOR C++03 OR BELOW
47 template <
typename... TTypes>
52 static constexpr size_t size =
sizeof...(TTypes);
63 template <
typename Type,
typename T1,
typename... TRest>
64 struct index_of_type_helper
70 template <
typename Type,
typename T1>
71 struct index_of_type_helper<Type, T1>
73 static constexpr size_t value = 1;
78 static_assert(
etl::is_one_of<T, TTypes...>::value,
"T is not in parameter pack");
81 static constexpr size_t value = index_of_type_helper<T, TTypes...>::value - 1;
86 static constexpr size_t index_of_type_v = index_of_type<T>::value;
98 template <
size_t II,
size_t N,
typename T1,
typename... TRest>
99 struct type_from_index_helper
101 using type =
typename etl::conditional<II == N, T1,
typename type_from_index_helper<II, N + 1, TRest...>::type>::type;
105 template <
size_t II,
size_t N,
typename T1>
106 struct type_from_index_helper<II, N, T1>
113 static_assert(I <
sizeof...(TTypes),
"Index out of bounds of parameter pack");
116 using type =
typename type_from_index_helper<I, 0, TTypes...>::type;
121 using type_from_index_t =
typename type_from_index<I>::type;
125 template <
size_t Index,
typename... TTypes>
126 using parameter_pack_t =
typename etl::parameter_pack<TTypes...>::template type_from_index_t<Index>;
129 template <
typename... TTypes>
130 constexpr size_t parameter_pack<TTypes...>::size;
133 template <
typename T,
typename... TTypes>
134 inline constexpr size_t parameter_pack_v = etl::parameter_pack<TTypes...>::template index_of_type<T>::value;
137 template <
typename... TTypes>
138 template <
typename T>
139 constexpr size_t parameter_pack<TTypes...>::template index_of_type<T>::value;
conditional
Definition: type_traits_generator.h:1160
is_same
Definition: type_traits_generator.h:1041
bitset_ext
Definition: absolute.h:38
Definition: type_traits.h:1376