25 template<
template<
typename...>
class List,
typename H,
typename... T>
26 struct Head<List<H, T...>>
31 template<
typename List>
34 template<
template<
typename...>
class List,
typename H,
typename... T>
35 constexpr List<T...>
Tail (List<H, T...>)
42 template<
int N,
typename List>
48 template<
typename List>
49 struct DropImpl<0, List>
55 template<
int N,
template<
typename...>
class List,
typename... Args>
61 template<
template<
typename...>
class List,
typename... Args1,
typename... Args2>
62 constexpr List<Args1..., Args2...>
Concat (List<Args1...>, List<Args2...>)
67 template<
template<
typename...>
class List>
73 template<
template<
typename...>
class List,
typename Head,
typename...
Tail>
81 template<
template<
typename...>
class List,
typename Tuple,
size_t... Is>
82 constexpr
auto InitImpl (std::integer_sequence<size_t, Is...>)
84 return List<std::tuple_element_t<Is, Tuple>...> {};
88 template<
template<
typename...>
class List,
typename... Args>
89 constexpr
auto Init (List<Args...>)
91 return detail::InitImpl<List, std::tuple<Args...>> (std::make_index_sequence<
sizeof... (Args) - 1> {});
94 template<
typename Type,
template<
typename...>
class List,
typename... Args>
95 constexpr
bool HasType (List<Args...>)
97 return (std::is_same_v<Type, Args> || ...);
102 template<
template<
typename>
class,
typename,
typename =
void>
106 template<
template<
typename>
class Pred,
typename List>
107 using Filter_t =
typename detail::Filter<Pred, List>::Result_t;
111 template<
template<
typename>
class Pred,
template<
typename...>
class List,
typename Head,
typename...
Tail>
112 struct Filter<Pred, List<Head,
Tail...>, std::enable_if_t<Pred<Head>::value>>
117 template<
template<
typename>
class Pred,
template<
typename...>
class List,
typename Head,
typename...
Tail>
118 struct Filter<Pred, List<Head,
Tail...>, std::enable_if_t<!Pred<Head>::value>>
120 using Result_t = Filter_t<Pred, List<
Tail...>>;
123 template<
template<
typename>
class Pred,
template<
typename...>
class List>
133 template<
template<
typename...>
class OtherList,
typename... Args>
142 template<
typename F,
typename G,
typename Def,
typename Head,
typename... Args>
148 if constexpr (
sizeof... (Args) > 0)
156 template<
template<
typename>
class Name,
typename Def,
typename... Args>
159 template<
template<
typename>
class Name,
typename Def,
typename T,
typename... Rest>
160 struct Find<Name, Def, T, Rest...> :
Find<Name, Def, Rest...> {};
162 template<
template<
typename>
class Name,
typename Def,
typename T,
typename... Rest>
163 struct Find<Name, Def, Name<T>, Rest...>
168 template<
template<
typename>
class Name,
typename Def>
175 template<
template<
typename>
class Name,
typename Def,
typename... Args>