10#if __has_builtin(__type_pack_element)
11 template<
usize index,
typename... Types>
12 struct AtHelper : TypeConstant<__type_pack_element<index, Types...>> {};
13#elif __has_builtin(__builtin_type_pack_element)
14 template<
usize index,
typename... Types>
15 struct AtHelper : TypeConstant<__builtin_type_pack_element(index, Types...)> {};
17 template<
usize index,
typename... Types>
20 template<
typename T,
typename... Rest>
21 struct AtHelper<0, T, Rest...> : TypeConstant<T> {};
23 template<
usize index,
typename T,
typename... Rest>
24 struct AtHelper<index, T, Rest...> : AtHelper<index - 1, Rest...> {};
29 template<
typename Needle,
typename... Types>
30 struct LookupHelper : Constexpr<0ZU> {};
32 template<
typename Needle,
typename T,
typename... Rest>
33 struct LookupHelper<Needle, T, Rest...>
34 : Constexpr<concepts::SameAs<T, Needle> ? 0ZU : 1 + LookupHelper<Needle, Rest...>::value> {};
38 template<
typename... Types>
42 struct BackHelper<T> : TypeConstant<T> {};
44 template<
typename Head,
typename... Tail>
45 struct BackHelper<Head, Tail...> : BackHelper<Tail...> {};
48template<
typename Head,
typename... Rest>
49struct List<Head, Rest...> {
52 using Back =
Type<detail::BackHelper<Rest...>>;
57 using At =
Type<detail::AtHelper<index, Head, Rest...>>;
60 constexpr static auto Lookup = detail::LookupHelper<T, Head, Rest...>::value;
75 using At = detail::AtHelper<index, T>::Type;
104 constexpr static usize Lookup = 0;
107template<concepts::TypeList T>
110template<concepts::TypeList T>
113template<concepts::TypeList T>
116template<concepts::TypeList T, usize index>
117requires(index < Size<T>)
120template<
typename T, concepts::TypeList List>
121constexpr static inline auto Lookup = List::template Lookup<T>;
123template<
typename T,
typename List>
126template<
typename List,
typename T>
130 template<
typename T,
typename List>
136 template<
typename T,
typename U,
typename... Rest>
137 struct CountHelper<T,
List<U, Rest...>> {
142template<concepts::TypeList List,
typename T>
143constexpr static auto Count = detail::CountHelper<T, List>::value;
145template<
typename List,
typename T>
size_t usize
Definition integers.h:33
constexpr auto size
Definition size.h:62
static constexpr auto value
Definition constexpr.h:40