16template<
typename ...T >
22 typedef false_type head;
23 typedef false_type tail;
26template<
typename HEAD,
typename ...TAIL>
27struct type_list<HEAD, TAIL...>
30 typedef type_list<TAIL...> tail;
33template<
typename TYPELIST,
template <
typename T>
class PREDICATE>
36template<
template <
typename T>
class PREDICATE>
37struct find_type<type_list<>, PREDICATE>
39 typedef false_type type;
42template<
typename TYPELIST,
template <
typename T>
class PREDICATE>
45 typedef typename conditional<PREDICATE<typename TYPELIST::head>::value,
46 typename TYPELIST::head,
47 typename find_type<typename TYPELIST::tail, PREDICATE>::type>::type type;
50template<
typename TYPELIST,
template <
typename T>
class PREDICATE>
51using find_type_t =
typename find_type<TYPELIST, PREDICATE>::type;