27template<
typename ...T >
33 typedef false_type head;
34 typedef false_type tail;
37template<
typename HEAD,
typename ...TAIL>
38struct type_list<HEAD, TAIL...>
41 typedef type_list<TAIL...> tail;
44template<
typename TYPELIST,
template <
typename T>
class PREDICATE>
47template<
template <
typename T>
class PREDICATE>
48struct find_type<type_list<>, PREDICATE>
50 typedef false_type type;
53template<
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;
61template<
typename TYPELIST,
template <
typename T>
class PREDICATE>
62using find_type_t =
typename find_type<TYPELIST, PREDICATE>::type;