48namespace __gnu_cxx _GLIBCXX_VISIBILITY(default)
 
   50_GLIBCXX_BEGIN_NAMESPACE_VERSION
 
   59  template<
typename Root>
 
   66  template<
typename Hd, 
typename Typelist>
 
   70      typedef Typelist  tail;
 
   74  template<
typename Fn, 
typename Typelist>
 
   79  template<
typename Gn, 
typename Typelist>
 
   84  template<
typename Gn, 
typename TypelistT, 
typename TypelistV>
 
   88  template<
typename Typelist0, 
typename Typelist1>
 
   91  template<
typename Typelist_Typelist>
 
   92    struct append_typelist;
 
   94  template<
typename Typelist, 
typename T>
 
   97  template<
typename Typelist, 
template<
typename T> 
class Pred>
 
  100  template<
typename Typelist, 
int i>
 
  103  template<
typename Typelist, 
template<
typename T> 
class Transform>
 
  106  template<
typename Typelist_Typelist>
 
  109  template<
typename Typelist>
 
  112  template<
typename T1>
 
  115  template<
typename T1, 
typename T2>
 
  118  template<
typename T1, 
typename T2, 
typename T3>
 
  121  template<
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
  124  template<
typename T1, 
typename T2, 
typename T3, 
typename T4, 
typename T5>
 
  127  template<
typename T1, 
typename T2, 
typename T3,
 
  128           typename T4, 
typename T5, 
typename T6>
 
  133  template<
typename Fn, 
typename Typelist_Chain>
 
  136  template<
typename Fn, 
typename Hd, 
typename Tl>
 
  137    struct apply_<Fn, chain<Hd, Tl> >
 
  148  template<
typename Fn>
 
  149    struct apply_<Fn, null_type>
 
  155  template<
typename Gn, 
typename Typelist_Chain>
 
  156    struct apply_generator1_;
 
  158  template<
typename Gn, 
typename Hd, 
typename Tl>
 
  159    struct apply_generator1_<Gn, chain<Hd, Tl> >
 
  164        g.template operator()<Hd>();
 
  165        apply_generator1_<Gn, Tl> next;
 
  170  template<
typename Gn>
 
  171    struct apply_generator1_<Gn, null_type>
 
  177  template<
typename Gn, 
typename TypelistT_Chain, 
typename TypelistV_Chain>
 
  178    struct apply_generator2_;
 
  180  template<
typename Gn, 
typename Hd1, 
typename TlT, 
typename Hd2, 
typename TlV>
 
  181    struct apply_generator2_<Gn, chain<Hd1, TlT>, chain<Hd2, TlV> >
 
  186        g.template operator()<Hd1, Hd2>();
 
  187        apply_generator2_<Gn, TlT, TlV> next;
 
  192  template<
typename Gn>
 
  193    struct apply_generator2_<Gn, null_type, null_type>
 
  199  template<
typename Typelist_Chain0, 
typename Typelist_Chain1>
 
  202  template<
typename Hd, 
typename Tl, 
typename Typelist_Chain>
 
  203    struct append_<chain<Hd, Tl>, Typelist_Chain>
 
  206      typedef append_<Tl, Typelist_Chain>                       append_type;
 
  209      typedef chain<Hd, typename append_type::type>             type;
 
  212  template<
typename Typelist_Chain>
 
  213    struct append_<null_type, Typelist_Chain>
 
  215      typedef Typelist_Chain                                    type;
 
  218  template<
typename Hd, 
typename Tl>
 
  219    struct append_<chain<Hd, Tl>, null_type>
 
  221      typedef chain<Hd, Tl>                                     type;
 
  225    struct append_<null_type, null_type>
 
  227      typedef null_type                                         type;
 
  230  template<
typename Typelist_Typelist_Chain>
 
  231    struct append_typelist_;
 
  233  template<
typename Hd>
 
  234    struct append_typelist_<chain<Hd, null_type> >
 
  236      typedef chain<Hd, null_type>                              type;
 
  239  template<
typename Hd, 
typename Tl>
 
  240    struct append_typelist_<chain< Hd, Tl> >
 
  243      typedef typename append_typelist_<Tl>::type               rest_type;
 
  246      typedef typename append<Hd, node<rest_type> >::type::root type;
 
  249  template<
typename Typelist_Chain, 
typename T>
 
  253    struct contains_<null_type, T>
 
  261  template<
typename Hd, 
typename Tl, 
typename T>
 
  262    struct contains_<chain<Hd, Tl>, T>
 
  266          value = contains_<Tl, T>::value
 
  270  template<
typename Tl, 
typename T>
 
  271    struct contains_<chain<T, Tl>, T>
 
  279  template<
typename Typelist_Chain, 
template<
typename T> 
class Pred>
 
  280    struct chain_filter_;
 
  282  template<
template<
typename T> 
class Pred>
 
  283    struct chain_filter_<null_type, Pred>
 
  285      typedef null_type                                         type;
 
  288  template<
typename Hd, 
typename Tl, 
template<
typename T> 
class Pred>
 
  289    struct chain_filter_<chain<Hd, Tl>, Pred>
 
  294          include_hd = Pred<Hd>::value
 
  297      typedef typename chain_filter_<Tl, Pred>::type            rest_type;
 
  298      typedef chain<Hd, rest_type>                              chain_type;
 
  301      typedef typename __conditional_type<include_hd, chain_type, rest_type>::__type type;
 
  304  template<
typename Typelist_Chain, 
int i>
 
  305    struct chain_at_index_;
 
  307  template<
typename Hd, 
typename Tl>
 
  308    struct chain_at_index_<chain<Hd, Tl>, 0>
 
  313  template<
typename Hd, 
typename Tl, 
int i>
 
  314    struct chain_at_index_<chain<Hd, Tl>, i>
 
  316      typedef typename chain_at_index_<Tl, i - 1>::type         type;
 
  319  template<
class Typelist_Chain, 
template<
typename T> 
class Transform>
 
  320    struct chain_transform_;
 
  322  template<
template<
typename T> 
class Transform>
 
  323    struct chain_transform_<null_type, Transform>
 
  325      typedef null_type                                         type;
 
  328  template<
class Hd, 
class Tl, 
template<
typename T> 
class Transform>
 
  329    struct chain_transform_<chain<Hd, Tl>, Transform>
 
  332      typedef typename chain_transform_<Tl, Transform>::type    rest_type;
 
  333      typedef typename Transform<Hd>::type                      transform_type;
 
  336      typedef chain<transform_type, rest_type>                  type;
 
  339  template<
typename Typelist_Typelist_Chain>
 
  340    struct chain_flatten_;
 
  342  template<
typename Hd_Tl>
 
  343    struct chain_flatten_<chain<Hd_Tl, null_type> >
 
  345      typedef typename Hd_Tl::root                              type;
 
  348  template<
typename Hd_Typelist, 
class Tl_Typelist>
 
  349    struct chain_flatten_<chain<Hd_Typelist, Tl_Typelist> >
 
  352      typedef typename chain_flatten_<Tl_Typelist>::type        rest_type;
 
  353      typedef append<Hd_Typelist, node<rest_type> >             append_type;
 
  355      typedef typename append_type::type::root                  type;
 
  359#define _GLIBCXX_TYPELIST_CHAIN1(X0) __gnu_cxx::typelist::chain<X0, __gnu_cxx::typelist::null_type> 
  360#define _GLIBCXX_TYPELIST_CHAIN2(X0, X1) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN1(X1) > 
  361#define _GLIBCXX_TYPELIST_CHAIN3(X0, X1, X2) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN2(X1, X2) > 
  362#define _GLIBCXX_TYPELIST_CHAIN4(X0, X1, X2, X3) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN3(X1, X2, X3) > 
  363#define _GLIBCXX_TYPELIST_CHAIN5(X0, X1, X2, X3, X4) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN4(X1, X2, X3, X4) > 
  364#define _GLIBCXX_TYPELIST_CHAIN6(X0, X1, X2, X3, X4, X5) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN5(X1, X2, X3, X4, X5) > 
  365#define _GLIBCXX_TYPELIST_CHAIN7(X0, X1, X2, X3, X4, X5, X6) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN6(X1, X2, X3, X4, X5, X6) > 
  366#define _GLIBCXX_TYPELIST_CHAIN8(X0, X1, X2, X3, X4, X5, X6, X7) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN7(X1, X2, X3, X4, X5, X6, X7) > 
  367#define _GLIBCXX_TYPELIST_CHAIN9(X0, X1, X2, X3, X4, X5, X6, X7, X8) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN8(X1, X2, X3, X4, X5, X6, X7, X8) > 
  368#define _GLIBCXX_TYPELIST_CHAIN10(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN9(X1, X2, X3, X4, X5, X6, X7, X8, X9) > 
  369#define _GLIBCXX_TYPELIST_CHAIN11(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN10(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10) > 
  370#define _GLIBCXX_TYPELIST_CHAIN12(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN11(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11) > 
  371#define _GLIBCXX_TYPELIST_CHAIN13(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN12(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12) > 
  372#define _GLIBCXX_TYPELIST_CHAIN14(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN13(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13) > 
  373#define _GLIBCXX_TYPELIST_CHAIN15(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN14(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14) > 
  374#define _GLIBCXX_TYPELIST_CHAIN16(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN15(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15) > 
  375#define _GLIBCXX_TYPELIST_CHAIN17(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN16(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16) > 
  376#define _GLIBCXX_TYPELIST_CHAIN18(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN17(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17) > 
  377#define _GLIBCXX_TYPELIST_CHAIN19(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN18(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18) > 
  378#define _GLIBCXX_TYPELIST_CHAIN20(X0, X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) __gnu_cxx::typelist::chain<X0, _GLIBCXX_TYPELIST_CHAIN19(X1, X2, X3, X4, X5, X6, X7, X8, X9, X10, X11, X12, X13, X14, X15, X16, X17, X18, X19) > 
  380  template<
typename Fn, 
typename Typelist>
 
  382    apply(Fn& fn, Typelist)
 
  384      detail::apply_<Fn, typename Typelist::root> a;
 
  388  template<
typename Fn, 
typename Typelist>
 
  392      detail::apply_generator1_<Fn, typename Typelist::root> a;
 
  396  template<
typename Fn, 
typename TypelistT, 
typename TypelistV>
 
  400      typedef typename TypelistT::root rootT;
 
  401      typedef typename TypelistV::root rootV;
 
  402      detail::apply_generator2_<Fn, rootT, rootV> a;
 
  406  template<
typename Typelist0, 
typename Typelist1>
 
  410      typedef typename Typelist0::root                          root0_type;
 
  411      typedef typename Typelist1::root                          root1_type;
 
  412      typedef detail::append_<root0_type, root1_type>           append_type;
 
  415      typedef node<typename append_type::type>                  type;
 
  418  template<
typename Typelist_Typelist>
 
  419    struct append_typelist
 
  422      typedef typename Typelist_Typelist::root                  root_type;
 
  423      typedef detail::append_typelist_<root_type>               append_type;
 
  426      typedef node<typename append_type::type>                  type;
 
  429  template<
typename Typelist, 
typename T>
 
  433      typedef typename Typelist::root                           root_type;
 
  438          value = detail::contains_<root_type, T>::value
 
  442  template<
typename Typelist, 
template<
typename T> 
class Pred>
 
  446      typedef typename Typelist::root                           root_type;
 
  447      typedef detail::chain_filter_<root_type, Pred>            filter_type;
 
  450      typedef node<typename filter_type::type>                  type;
 
  453  template<
typename Typelist, 
int i>
 
  457      typedef typename Typelist::root                           root_type;
 
  458      typedef detail::chain_at_index_<root_type, i>             index_type;
 
  461      typedef typename index_type::type                         type;
 
  464  template<
typename Typelist, 
template<
typename T> 
class Transform>
 
  468      typedef typename Typelist::root                           root_type;
 
  469      typedef detail::chain_transform_<root_type, Transform>    transform_type;
 
  472      typedef node<typename transform_type::type>               type;
 
  475  template<
typename Typelist_Typelist>
 
  479      typedef typename Typelist_Typelist::root                  root_type;
 
  480      typedef typename detail::chain_flatten_<root_type>::type  flatten_type;
 
  483      typedef node<flatten_type>                                type;
 
  486  template<
typename Typelist>
 
  490      typedef typename at_index<Typelist, 0>::type              first_type;
 
  493      typedef node<chain<first_type, null_type> >               type;
 
  496  template<
typename T1>
 
  499      typedef node<_GLIBCXX_TYPELIST_CHAIN1(T1)>                type;
 
  502  template<
typename T1, 
typename T2>
 
  505      typedef node<_GLIBCXX_TYPELIST_CHAIN2(T1,T2)>             type;
 
  508  template<
typename T1, 
typename T2, 
typename T3>
 
  511      typedef node<_GLIBCXX_TYPELIST_CHAIN3(T1,T2,T3)>          type;
 
  514  template<
typename T1, 
typename T2, 
typename T3, 
typename T4>
 
  517      typedef node<_GLIBCXX_TYPELIST_CHAIN4(T1,T2,T3,T4)>       type;
 
  520  template<
typename T1, 
typename T2, 
typename T3,
 
  521           typename T4, 
typename T5>
 
  524      typedef node<_GLIBCXX_TYPELIST_CHAIN5(T1,T2,T3,T4,T5)>    type;
 
  527  template<
typename T1, 
typename T2, 
typename T3,
 
  528           typename T4, 
typename T5, 
typename T6>
 
  531      typedef node<_GLIBCXX_TYPELIST_CHAIN6(T1,T2,T3,T4,T5,T6)> type;
 
  534_GLIBCXX_END_NAMESPACE_VERSION
 
GNU extensions for public use.
void apply_generator(Gn &, Typelist)
Apply all typelist types to generator functor.