23 #include "type_traits" 27 template<
typename ...T >
33 typedef false_type head;
34 typedef false_type tail;
37 template<
typename HEAD,
typename ...TAIL>
38 struct type_list<HEAD, TAIL...>
41 typedef type_list<TAIL...> tail;
44 template<
typename TYPELIST,
template <
typename T>
class PREDICATE>
47 template<
template <
typename T>
class PREDICATE>
48 struct find_type<type_list<>, PREDICATE>
50 typedef false_type type;
53 template<
typename TYPELIST,
template <
typename T>
class PREDICATE>
56 typedef typename conditional<PREDICATE<typename TYPELIST::head>::value,
57 typename TYPELIST::head,
58 typename find_type<typename TYPELIST::tail, PREDICATE>::type>::type type;