17namespace MetaTypeList {
37 template<
typename Head,
typename... Tail>
39 public create<type_list<Head>, Tail...> {};
45 template<
typename Head,
typename... Tail,
typename... Elements>
47 public create<type_list<Elements..., Head>, Tail...> {};
54 template<
typename... Elements>
63 template<
typename... Elements>
78 template<
typename Head,
typename... Tail>
87 template<
typename List>
102 template<
typename Head,
typename... Tail>
111 template<
typename List>
121 template<
typename,
typename>
127 template<
typename... Elements,
typename NewElement>
136 template<
typename List,
typename NewElement>
146 template<
typename,
typename>
152 template<
typename... Elements,
typename NewElement>
161 template<
typename List,
typename NewElement>
169 template<
typename List,
unsigned N>
175 template<
typename List>
181 template<
typename List,
unsigned N>
200 template<
typename...>
207 template<
typename Head,
typename... Tail>
210 static constexpr std::size_t value =
220 static constexpr std::size_t value = 0;
228 template<
typename...>
235 template<
typename... Args>
242 template<std::size_t,
typename...>
250 template<std::size_t S,
typename T,
typename Head,
typename... Tail>
252 typename std::enable_if<std::is_same<T, Head>::value>::type> {
254 static constexpr std::size_t value = (S -
sizeof...(Tail)) - 1;
262 template<std::size_t S,
typename T,
typename Head,
typename... Tail>
264 typename std::enable_if<!std::is_same<T, Head>::value>::type> :
265 public get_index<S, T, type_list<Tail...>> {};