capydi
Loading...
Searching...
No Matches
Filter.hpp
Go to the documentation of this file.
1#ifndef FILTER_HPP_
2#define FILTER_HPP_
3
5#include "Prepend.hpp"
6
7#include <type_traits>
8
9namespace capy::meta::legacy
10{
11
12template<
13 typename Pack,
14 template<typename> typename Predicate
15>
16struct Filter;
17
18template<
19 template<typename> typename Predicate,
20 typename Head,
21 typename... Rest
22>
23struct Filter<Pack<Head, Rest...>, Predicate>
24{
25 using type = std::conditional_t<
26 Predicate<Head>::value,
27 prepend_t<Head, typename Filter<Pack<Rest...>, Predicate>::type>,
28 typename Filter<Pack<Rest...>, Predicate>::type
29 >;
30};
31
32template<
33 template<typename> typename Predicate
34>
35struct Filter<Pack<>, Predicate>
36{
37 using type = Pack<>;
38};
39
40template<
41 typename Pack,
42 template<typename> typename Predicate
43>
45
46}
47
48#endif // !FILTER_HPP_
Compile-time type pack utilities and metaprogramming foundations.
Definition Append.hpp:7
typename Filter< Pack, Predicate >::type filter_t
Definition Filter.hpp:44
typename Prepend< Element, Pack >::type prepend_t
Definition Prepend.hpp:19
A compile-time heterogeneous type list.
Definition Pack.hpp:70
std::conditional_t< Predicate< Head >::value, prepend_t< Head, typename Filter< Pack< Rest... >, Predicate >::type >, typename Filter< Pack< Rest... >, Predicate >::type > type
Definition Filter.hpp:25
Definition Filter.hpp:16
Definition Head.hpp:11