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;
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;
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#if ETL_USING_CPP17 && !ETL_USING_GCC_COMPILER
139 template <
typename... TTypes>
140 template <
typename T>
141 constexpr size_t parameter_pack<TTypes...>::template index_of_type<T>::value;
144 template <
typename... TTypes>
145 template <
typename T>
146 constexpr size_t parameter_pack<TTypes...>::index_of_type<T>::value;
conditional
Definition type_traits_generator.h:1155
is_same
Definition type_traits_generator.h:1036
bitset_ext
Definition absolute.h:38
ETL_CONSTEXPR TContainer::size_type size(const TContainer &container)
Definition iterator.h:1187
pair holds two objects of arbitrary type
Definition utility.h:164
ETL_CONSTEXPR pair()
Default constructor.
Definition utility.h:176