43 template<
template<
typename...>
class List,
typename H,
typename... T>
44 constexpr List<T...>
Tail (List<H, T...>)
51 template<
int N,
typename List>
57 template<
typename List>
64 template<
int N,
template<
typename...>
class List,
typename... Args>
70 template<
template<
typename...>
class List,
typename... Args1,
typename... Args2>
71 constexpr List<Args1..., Args2...>
Concat (List<Args1...>, List<Args2...>)
76 template<
template<
typename...>
class List>
82 template<
template<
typename...>
class List,
typename Head,
typename...
Tail>
90 template<
template<
typename...>
class List,
typename Tuple,
size_t... Is>
91 constexpr
auto InitImpl (std::integer_sequence<size_t, Is...>)
93 return List<std::tuple_element_t<Is, Tuple>...> {};
97 template<
template<
typename...>
class List,
typename... Args>
98 constexpr
auto Init (List<Args...>)
100 return detail::InitImpl<List, std::tuple<Args...>> (std::make_index_sequence<
sizeof... (Args) - 1> {});
105 template<
typename Type,
template<
typename...>
class List,
typename...
Tail>
106 constexpr
bool HasTypeImpl (List<Type, Tail...>,
int)
111 template<
typename,
template<
typename...>
class List>
112 constexpr
bool HasTypeImpl (List<>,
float)
117 template<
typename Type,
template<
typename...>
class List,
typename Head,
typename...
Tail>
118 constexpr
bool HasTypeImpl (List<Head, Tail...>,
float)
120 return HasTypeImpl<Type> (List<
Tail...> {}, 0);
124 template<
typename Type,
template<
typename...>
class List,
typename... Args>
125 constexpr
bool HasType (List<Args...> list)
127 return detail::HasTypeImpl<Type> (list, 0);
132 template<
template<
typename>
class,
typename,
typename =
void>
136 template<
template<
typename>
class Pred,
typename List>
137 using Filter_t =
typename detail::Filter<Pred, List>::Result_t;
141 template<
template<
typename>
class Pred,
template<
typename...>
class List,
typename Head,
typename...
Tail>
142 struct Filter<Pred, List<Head,
Tail...>, std::enable_if_t<Pred<Head>::value>>
147 template<
template<
typename>
class Pred,
template<
typename...>
class List,
typename Head,
typename...
Tail>
148 struct Filter<Pred, List<Head,
Tail...>, std::enable_if_t<!Pred<Head>::value>>
153 template<
template<
typename>
class Pred,
template<
typename...>
class List>
163 template<
template<
typename...>
class OtherList,
typename... Args>
constexpr List Reverse(List<>)
constexpr List< T...> Tail(List< H, T...>)
Container< T > Concat(const Container< Container< T >> &containers)
typename DropImpl< N-1, decltype(Tail(List{}))>::Result_t Result_t
Type
Describes the various types of XDG .desktop files.
constexpr detail::DropImpl< N, List< Args...> >::Result_t Drop(List< Args...>)
Container< T > Filter(const Container< T > &c, F f)
typename AsTypelist< T >::Result_t AsTypelist_t
decltype(Concat(List< Head >{}, Filter_t< Pred, List< Tail...>>{})) Result_t
Filter_t< Pred, List< Tail...>> Result_t