arity10_0.hpp 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // (C) Copyright Tobias Schwinger
  2. //
  3. // Use modification and distribution are subject to the boost Software License,
  4. // Version 1.0. (See http://www.boost.org/LICENSE_1_0.txt).
  5. //------------------------------------------------------------------------------
  6. // no include guards, this file is intended for multiple inclusion
  7. // input: BOOST_FT_syntax type macro to use
  8. // input: BOOST_FT_cc empty or cc specifier
  9. // input: BOOST_FT_ell empty or "..."
  10. // input: BOOST_FT_cv empty or cv qualifiers
  11. // input: BOOST_FT_flags single decimal integer encoding the flags
  12. // output: BOOST_FT_n number of component types (arity+1)
  13. // output: BOOST_FT_arity current arity
  14. // output: BOOST_FT_type macro that expands to the type
  15. // output: BOOST_FT_tplargs(p) template arguments with given prefix
  16. // output: BOOST_FT_params(p) parameters with given prefix
  17. template< typename R, typename L>
  18. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (BOOST_FT_nullary_param BOOST_FT_ell) BOOST_FT_cv, L>
  19. {
  20. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  21. typedef constant<BOOST_FT_full_mask> mask;
  22. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (BOOST_FT_nullary_param BOOST_FT_ell) BOOST_FT_cv, L> type;
  23. typedef components_mpl_sequence_tag tag;
  24. typedef mpl::integral_c<std::size_t,0> function_arity;
  25. typedef mpl::vector1< R BOOST_FT_nullary_param > types;
  26. };
  27. template< typename R , typename T0, typename L>
  28. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 BOOST_FT_ell) BOOST_FT_cv, L>
  29. {
  30. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  31. typedef constant<BOOST_FT_full_mask> mask;
  32. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 BOOST_FT_ell) BOOST_FT_cv, L> type;
  33. typedef components_mpl_sequence_tag tag;
  34. typedef mpl::integral_c<std::size_t,1> function_arity;
  35. typedef mpl::vector2< R , T0 > types;
  36. };
  37. template< typename R , typename T0 , typename T1, typename L>
  38. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 BOOST_FT_ell) BOOST_FT_cv, L>
  39. {
  40. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  41. typedef constant<BOOST_FT_full_mask> mask;
  42. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 BOOST_FT_ell) BOOST_FT_cv, L> type;
  43. typedef components_mpl_sequence_tag tag;
  44. typedef mpl::integral_c<std::size_t,2> function_arity;
  45. typedef mpl::vector3< R , T0 , T1 > types;
  46. };
  47. template< typename R , typename T0 , typename T1 , typename T2, typename L>
  48. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 BOOST_FT_ell) BOOST_FT_cv, L>
  49. {
  50. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  51. typedef constant<BOOST_FT_full_mask> mask;
  52. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 BOOST_FT_ell) BOOST_FT_cv, L> type;
  53. typedef components_mpl_sequence_tag tag;
  54. typedef mpl::integral_c<std::size_t,3> function_arity;
  55. typedef mpl::vector4< R , T0 , T1 , T2 > types;
  56. };
  57. template< typename R , typename T0 , typename T1 , typename T2 , typename T3, typename L>
  58. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv, L>
  59. {
  60. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  61. typedef constant<BOOST_FT_full_mask> mask;
  62. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 BOOST_FT_ell) BOOST_FT_cv, L> type;
  63. typedef components_mpl_sequence_tag tag;
  64. typedef mpl::integral_c<std::size_t,4> function_arity;
  65. typedef mpl::vector5< R , T0 , T1 , T2 , T3 > types;
  66. };
  67. template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4, typename L>
  68. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv, L>
  69. {
  70. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  71. typedef constant<BOOST_FT_full_mask> mask;
  72. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 BOOST_FT_ell) BOOST_FT_cv, L> type;
  73. typedef components_mpl_sequence_tag tag;
  74. typedef mpl::integral_c<std::size_t,5> function_arity;
  75. typedef mpl::vector6< R , T0 , T1 , T2 , T3 , T4 > types;
  76. };
  77. template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5, typename L>
  78. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv, L>
  79. {
  80. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  81. typedef constant<BOOST_FT_full_mask> mask;
  82. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 BOOST_FT_ell) BOOST_FT_cv, L> type;
  83. typedef components_mpl_sequence_tag tag;
  84. typedef mpl::integral_c<std::size_t,6> function_arity;
  85. typedef mpl::vector7< R , T0 , T1 , T2 , T3 , T4 , T5 > types;
  86. };
  87. template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6, typename L>
  88. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv, L>
  89. {
  90. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  91. typedef constant<BOOST_FT_full_mask> mask;
  92. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 BOOST_FT_ell) BOOST_FT_cv, L> type;
  93. typedef components_mpl_sequence_tag tag;
  94. typedef mpl::integral_c<std::size_t,7> function_arity;
  95. typedef mpl::vector8< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 > types;
  96. };
  97. template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7, typename L>
  98. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv, L>
  99. {
  100. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  101. typedef constant<BOOST_FT_full_mask> mask;
  102. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 BOOST_FT_ell) BOOST_FT_cv, L> type;
  103. typedef components_mpl_sequence_tag tag;
  104. typedef mpl::integral_c<std::size_t,8> function_arity;
  105. typedef mpl::vector9< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 > types;
  106. };
  107. template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8, typename L>
  108. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv, L>
  109. {
  110. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  111. typedef constant<BOOST_FT_full_mask> mask;
  112. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 BOOST_FT_ell) BOOST_FT_cv, L> type;
  113. typedef components_mpl_sequence_tag tag;
  114. typedef mpl::integral_c<std::size_t,9> function_arity;
  115. typedef mpl::vector10< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 > types;
  116. };
  117. template< typename R , typename T0 , typename T1 , typename T2 , typename T3 , typename T4 , typename T5 , typename T6 , typename T7 , typename T8 , typename T9, typename L>
  118. struct components_impl<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv, L>
  119. {
  120. typedef encode_bits<BOOST_FT_flags,BOOST_FT_cc_id> bits;
  121. typedef constant<BOOST_FT_full_mask> mask;
  122. typedef function_types::components<BOOST_FT_syntax(BOOST_FT_cc, BOOST_PP_EMPTY) (T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 BOOST_FT_ell) BOOST_FT_cv, L> type;
  123. typedef components_mpl_sequence_tag tag;
  124. typedef mpl::integral_c<std::size_t,10> function_arity;
  125. typedef mpl::vector11< R , T0 , T1 , T2 , T3 , T4 , T5 , T6 , T7 , T8 , T9 > types;
  126. };