variadic_templates.hpp 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294
  1. //
  2. // detail/variadic_templates.hpp
  3. // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4. //
  5. // Copyright (c) 2003-2021 Christopher M. Kohlhoff (chris at kohlhoff dot com)
  6. //
  7. // Distributed under the Boost Software License, Version 1.0. (See accompanying
  8. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  9. //
  10. #ifndef BOOST_ASIO_DETAIL_VARIADIC_TEMPLATES_HPP
  11. #define BOOST_ASIO_DETAIL_VARIADIC_TEMPLATES_HPP
  12. #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  13. # pragma once
  14. #endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
  15. #include <boost/asio/detail/config.hpp>
  16. #if !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
  17. # define BOOST_ASIO_VARIADIC_TPARAMS(n) BOOST_ASIO_VARIADIC_TPARAMS_##n
  18. # define BOOST_ASIO_VARIADIC_TPARAMS_1 \
  19. typename T1
  20. # define BOOST_ASIO_VARIADIC_TPARAMS_2 \
  21. typename T1, typename T2
  22. # define BOOST_ASIO_VARIADIC_TPARAMS_3 \
  23. typename T1, typename T2, typename T3
  24. # define BOOST_ASIO_VARIADIC_TPARAMS_4 \
  25. typename T1, typename T2, typename T3, typename T4
  26. # define BOOST_ASIO_VARIADIC_TPARAMS_5 \
  27. typename T1, typename T2, typename T3, typename T4, typename T5
  28. # define BOOST_ASIO_VARIADIC_TPARAMS_6 \
  29. typename T1, typename T2, typename T3, typename T4, typename T5, \
  30. typename T6
  31. # define BOOST_ASIO_VARIADIC_TPARAMS_7 \
  32. typename T1, typename T2, typename T3, typename T4, typename T5, \
  33. typename T6, typename T7
  34. # define BOOST_ASIO_VARIADIC_TPARAMS_8 \
  35. typename T1, typename T2, typename T3, typename T4, typename T5, \
  36. typename T6, typename T7, typename T8
  37. # define BOOST_ASIO_VARIADIC_TARGS(n) BOOST_ASIO_VARIADIC_TARGS_##n
  38. # define BOOST_ASIO_VARIADIC_TARGS_1 T1
  39. # define BOOST_ASIO_VARIADIC_TARGS_2 T1, T2
  40. # define BOOST_ASIO_VARIADIC_TARGS_3 T1, T2, T3
  41. # define BOOST_ASIO_VARIADIC_TARGS_4 T1, T2, T3, T4
  42. # define BOOST_ASIO_VARIADIC_TARGS_5 T1, T2, T3, T4, T5
  43. # define BOOST_ASIO_VARIADIC_TARGS_6 T1, T2, T3, T4, T5, T6
  44. # define BOOST_ASIO_VARIADIC_TARGS_7 T1, T2, T3, T4, T5, T6, T7
  45. # define BOOST_ASIO_VARIADIC_TARGS_8 T1, T2, T3, T4, T5, T6, T7, T8
  46. # define BOOST_ASIO_VARIADIC_BYVAL_PARAMS(n) \
  47. BOOST_ASIO_VARIADIC_BYVAL_PARAMS_##n
  48. # define BOOST_ASIO_VARIADIC_BYVAL_PARAMS_1 T1 x1
  49. # define BOOST_ASIO_VARIADIC_BYVAL_PARAMS_2 T1 x1, T2 x2
  50. # define BOOST_ASIO_VARIADIC_BYVAL_PARAMS_3 T1 x1, T2 x2, T3 x3
  51. # define BOOST_ASIO_VARIADIC_BYVAL_PARAMS_4 T1 x1, T2 x2, T3 x3, T4 x4
  52. # define BOOST_ASIO_VARIADIC_BYVAL_PARAMS_5 T1 x1, T2 x2, T3 x3, T4 x4, T5 x5
  53. # define BOOST_ASIO_VARIADIC_BYVAL_PARAMS_6 T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, \
  54. T6 x6
  55. # define BOOST_ASIO_VARIADIC_BYVAL_PARAMS_7 T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, \
  56. T6 x6, T7 x7
  57. # define BOOST_ASIO_VARIADIC_BYVAL_PARAMS_8 T1 x1, T2 x2, T3 x3, T4 x4, T5 x5, \
  58. T6 x6, T7 x7, T8 x8
  59. # define BOOST_ASIO_VARIADIC_BYVAL_ARGS(n) \
  60. BOOST_ASIO_VARIADIC_BYVAL_ARGS_##n
  61. # define BOOST_ASIO_VARIADIC_BYVAL_ARGS_1 x1
  62. # define BOOST_ASIO_VARIADIC_BYVAL_ARGS_2 x1, x2
  63. # define BOOST_ASIO_VARIADIC_BYVAL_ARGS_3 x1, x2, x3
  64. # define BOOST_ASIO_VARIADIC_BYVAL_ARGS_4 x1, x2, x3, x4
  65. # define BOOST_ASIO_VARIADIC_BYVAL_ARGS_5 x1, x2, x3, x4, x5
  66. # define BOOST_ASIO_VARIADIC_BYVAL_ARGS_6 x1, x2, x3, x4, x5, x6
  67. # define BOOST_ASIO_VARIADIC_BYVAL_ARGS_7 x1, x2, x3, x4, x5, x6, x7
  68. # define BOOST_ASIO_VARIADIC_BYVAL_ARGS_8 x1, x2, x3, x4, x5, x6, x7, x8
  69. # define BOOST_ASIO_VARIADIC_CONSTREF_PARAMS(n) \
  70. BOOST_ASIO_VARIADIC_CONSTREF_PARAMS_##n
  71. # define BOOST_ASIO_VARIADIC_CONSTREF_PARAMS_1 \
  72. const T1& x1
  73. # define BOOST_ASIO_VARIADIC_CONSTREF_PARAMS_2 \
  74. const T1& x1, const T2& x2
  75. # define BOOST_ASIO_VARIADIC_CONSTREF_PARAMS_3 \
  76. const T1& x1, const T2& x2, const T3& x3
  77. # define BOOST_ASIO_VARIADIC_CONSTREF_PARAMS_4 \
  78. const T1& x1, const T2& x2, const T3& x3, const T4& x4
  79. # define BOOST_ASIO_VARIADIC_CONSTREF_PARAMS_5 \
  80. const T1& x1, const T2& x2, const T3& x3, const T4& x4, const T5& x5
  81. # define BOOST_ASIO_VARIADIC_CONSTREF_PARAMS_6 \
  82. const T1& x1, const T2& x2, const T3& x3, const T4& x4, const T5& x5, \
  83. const T6& x6
  84. # define BOOST_ASIO_VARIADIC_CONSTREF_PARAMS_7 \
  85. const T1& x1, const T2& x2, const T3& x3, const T4& x4, const T5& x5, \
  86. const T6& x6, const T7& x7
  87. # define BOOST_ASIO_VARIADIC_CONSTREF_PARAMS_8 \
  88. const T1& x1, const T2& x2, const T3& x3, const T4& x4, const T5& x5, \
  89. const T6& x6, const T7& x7, const T8& x8
  90. # define BOOST_ASIO_VARIADIC_MOVE_PARAMS(n) \
  91. BOOST_ASIO_VARIADIC_MOVE_PARAMS_##n
  92. # define BOOST_ASIO_VARIADIC_MOVE_PARAMS_1 \
  93. BOOST_ASIO_MOVE_ARG(T1) x1
  94. # define BOOST_ASIO_VARIADIC_MOVE_PARAMS_2 \
  95. BOOST_ASIO_MOVE_ARG(T1) x1, BOOST_ASIO_MOVE_ARG(T2) x2
  96. # define BOOST_ASIO_VARIADIC_MOVE_PARAMS_3 \
  97. BOOST_ASIO_MOVE_ARG(T1) x1, BOOST_ASIO_MOVE_ARG(T2) x2, \
  98. BOOST_ASIO_MOVE_ARG(T3) x3
  99. # define BOOST_ASIO_VARIADIC_MOVE_PARAMS_4 \
  100. BOOST_ASIO_MOVE_ARG(T1) x1, BOOST_ASIO_MOVE_ARG(T2) x2, \
  101. BOOST_ASIO_MOVE_ARG(T3) x3, BOOST_ASIO_MOVE_ARG(T4) x4
  102. # define BOOST_ASIO_VARIADIC_MOVE_PARAMS_5 \
  103. BOOST_ASIO_MOVE_ARG(T1) x1, BOOST_ASIO_MOVE_ARG(T2) x2, \
  104. BOOST_ASIO_MOVE_ARG(T3) x3, BOOST_ASIO_MOVE_ARG(T4) x4, \
  105. BOOST_ASIO_MOVE_ARG(T5) x5
  106. # define BOOST_ASIO_VARIADIC_MOVE_PARAMS_6 \
  107. BOOST_ASIO_MOVE_ARG(T1) x1, BOOST_ASIO_MOVE_ARG(T2) x2, \
  108. BOOST_ASIO_MOVE_ARG(T3) x3, BOOST_ASIO_MOVE_ARG(T4) x4, \
  109. BOOST_ASIO_MOVE_ARG(T5) x5, BOOST_ASIO_MOVE_ARG(T6) x6
  110. # define BOOST_ASIO_VARIADIC_MOVE_PARAMS_7 \
  111. BOOST_ASIO_MOVE_ARG(T1) x1, BOOST_ASIO_MOVE_ARG(T2) x2, \
  112. BOOST_ASIO_MOVE_ARG(T3) x3, BOOST_ASIO_MOVE_ARG(T4) x4, \
  113. BOOST_ASIO_MOVE_ARG(T5) x5, BOOST_ASIO_MOVE_ARG(T6) x6, \
  114. BOOST_ASIO_MOVE_ARG(T7) x7
  115. # define BOOST_ASIO_VARIADIC_MOVE_PARAMS_8 \
  116. BOOST_ASIO_MOVE_ARG(T1) x1, BOOST_ASIO_MOVE_ARG(T2) x2, \
  117. BOOST_ASIO_MOVE_ARG(T3) x3, BOOST_ASIO_MOVE_ARG(T4) x4, \
  118. BOOST_ASIO_MOVE_ARG(T5) x5, BOOST_ASIO_MOVE_ARG(T6) x6, \
  119. BOOST_ASIO_MOVE_ARG(T7) x7, BOOST_ASIO_MOVE_ARG(T8) x8
  120. # define BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS(n) \
  121. BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS_##n
  122. # define BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS_1 \
  123. BOOST_ASIO_MOVE_ARG(T1)
  124. # define BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS_2 \
  125. BOOST_ASIO_MOVE_ARG(T1), BOOST_ASIO_MOVE_ARG(T2)
  126. # define BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS_3 \
  127. BOOST_ASIO_MOVE_ARG(T1), BOOST_ASIO_MOVE_ARG(T2), \
  128. BOOST_ASIO_MOVE_ARG(T3)
  129. # define BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS_4 \
  130. BOOST_ASIO_MOVE_ARG(T1), BOOST_ASIO_MOVE_ARG(T2), \
  131. BOOST_ASIO_MOVE_ARG(T3), BOOST_ASIO_MOVE_ARG(T4)
  132. # define BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS_5 \
  133. BOOST_ASIO_MOVE_ARG(T1), BOOST_ASIO_MOVE_ARG(T2), \
  134. BOOST_ASIO_MOVE_ARG(T3), BOOST_ASIO_MOVE_ARG(T4), \
  135. BOOST_ASIO_MOVE_ARG(T5)
  136. # define BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS_6 \
  137. BOOST_ASIO_MOVE_ARG(T1), BOOST_ASIO_MOVE_ARG(T2), \
  138. BOOST_ASIO_MOVE_ARG(T3), BOOST_ASIO_MOVE_ARG(T4), \
  139. BOOST_ASIO_MOVE_ARG(T5), BOOST_ASIO_MOVE_ARG(T6)
  140. # define BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS_7 \
  141. BOOST_ASIO_MOVE_ARG(T1), BOOST_ASIO_MOVE_ARG(T2), \
  142. BOOST_ASIO_MOVE_ARG(T3), BOOST_ASIO_MOVE_ARG(T4), \
  143. BOOST_ASIO_MOVE_ARG(T5), BOOST_ASIO_MOVE_ARG(T6), \
  144. BOOST_ASIO_MOVE_ARG(T7)
  145. # define BOOST_ASIO_VARIADIC_UNNAMED_MOVE_PARAMS_8 \
  146. BOOST_ASIO_MOVE_ARG(T1), BOOST_ASIO_MOVE_ARG(T2), \
  147. BOOST_ASIO_MOVE_ARG(T3), BOOST_ASIO_MOVE_ARG(T4), \
  148. BOOST_ASIO_MOVE_ARG(T5), BOOST_ASIO_MOVE_ARG(T6), \
  149. BOOST_ASIO_MOVE_ARG(T7), BOOST_ASIO_MOVE_ARG(T8)
  150. # define BOOST_ASIO_VARIADIC_MOVE_ARGS(n) \
  151. BOOST_ASIO_VARIADIC_MOVE_ARGS_##n
  152. # define BOOST_ASIO_VARIADIC_MOVE_ARGS_1 \
  153. BOOST_ASIO_MOVE_CAST(T1)(x1)
  154. # define BOOST_ASIO_VARIADIC_MOVE_ARGS_2 \
  155. BOOST_ASIO_MOVE_CAST(T1)(x1), BOOST_ASIO_MOVE_CAST(T2)(x2)
  156. # define BOOST_ASIO_VARIADIC_MOVE_ARGS_3 \
  157. BOOST_ASIO_MOVE_CAST(T1)(x1), BOOST_ASIO_MOVE_CAST(T2)(x2), \
  158. BOOST_ASIO_MOVE_CAST(T3)(x3)
  159. # define BOOST_ASIO_VARIADIC_MOVE_ARGS_4 \
  160. BOOST_ASIO_MOVE_CAST(T1)(x1), BOOST_ASIO_MOVE_CAST(T2)(x2), \
  161. BOOST_ASIO_MOVE_CAST(T3)(x3), BOOST_ASIO_MOVE_CAST(T4)(x4)
  162. # define BOOST_ASIO_VARIADIC_MOVE_ARGS_5 \
  163. BOOST_ASIO_MOVE_CAST(T1)(x1), BOOST_ASIO_MOVE_CAST(T2)(x2), \
  164. BOOST_ASIO_MOVE_CAST(T3)(x3), BOOST_ASIO_MOVE_CAST(T4)(x4), \
  165. BOOST_ASIO_MOVE_CAST(T5)(x5)
  166. # define BOOST_ASIO_VARIADIC_MOVE_ARGS_6 \
  167. BOOST_ASIO_MOVE_CAST(T1)(x1), BOOST_ASIO_MOVE_CAST(T2)(x2), \
  168. BOOST_ASIO_MOVE_CAST(T3)(x3), BOOST_ASIO_MOVE_CAST(T4)(x4), \
  169. BOOST_ASIO_MOVE_CAST(T5)(x5), BOOST_ASIO_MOVE_CAST(T6)(x6)
  170. # define BOOST_ASIO_VARIADIC_MOVE_ARGS_7 \
  171. BOOST_ASIO_MOVE_CAST(T1)(x1), BOOST_ASIO_MOVE_CAST(T2)(x2), \
  172. BOOST_ASIO_MOVE_CAST(T3)(x3), BOOST_ASIO_MOVE_CAST(T4)(x4), \
  173. BOOST_ASIO_MOVE_CAST(T5)(x5), BOOST_ASIO_MOVE_CAST(T6)(x6), \
  174. BOOST_ASIO_MOVE_CAST(T7)(x7)
  175. # define BOOST_ASIO_VARIADIC_MOVE_ARGS_8 \
  176. BOOST_ASIO_MOVE_CAST(T1)(x1), BOOST_ASIO_MOVE_CAST(T2)(x2), \
  177. BOOST_ASIO_MOVE_CAST(T3)(x3), BOOST_ASIO_MOVE_CAST(T4)(x4), \
  178. BOOST_ASIO_MOVE_CAST(T5)(x5), BOOST_ASIO_MOVE_CAST(T6)(x6), \
  179. BOOST_ASIO_MOVE_CAST(T7)(x7), BOOST_ASIO_MOVE_CAST(T8)(x8)
  180. # define BOOST_ASIO_VARIADIC_DECLVAL(n) \
  181. BOOST_ASIO_VARIADIC_DECLVAL_##n
  182. # define BOOST_ASIO_VARIADIC_DECLVAL_1 \
  183. declval<T1>()
  184. # define BOOST_ASIO_VARIADIC_DECLVAL_2 \
  185. declval<T1>(), declval<T2>()
  186. # define BOOST_ASIO_VARIADIC_DECLVAL_3 \
  187. declval<T1>(), declval<T2>(), declval<T3>()
  188. # define BOOST_ASIO_VARIADIC_DECLVAL_4 \
  189. declval<T1>(), declval<T2>(), declval<T3>(), declval<T4>()
  190. # define BOOST_ASIO_VARIADIC_DECLVAL_5 \
  191. declval<T1>(), declval<T2>(), declval<T3>(), declval<T4>(), \
  192. declval<T5>()
  193. # define BOOST_ASIO_VARIADIC_DECLVAL_6 \
  194. declval<T1>(), declval<T2>(), declval<T3>(), declval<T4>(), \
  195. declval<T5>(), declval<T6>()
  196. # define BOOST_ASIO_VARIADIC_DECLVAL_7 \
  197. declval<T1>(), declval<T2>(), declval<T3>(), declval<T4>(), \
  198. declval<T5>(), declval<T6>(), declval<T7>()
  199. # define BOOST_ASIO_VARIADIC_DECLVAL_8 \
  200. declval<T1>(), declval<T2>(), declval<T3>(), declval<T4>(), \
  201. declval<T5>(), declval<T6>(), declval<T7>(), declval<T8>()
  202. # define BOOST_ASIO_VARIADIC_MOVE_DECLVAL(n) \
  203. BOOST_ASIO_VARIADIC_MOVE_DECLVAL_##n
  204. # define BOOST_ASIO_VARIADIC_MOVE_DECLVAL_1 \
  205. declval<BOOST_ASIO_MOVE_ARG(T1)>()
  206. # define BOOST_ASIO_VARIADIC_MOVE_DECLVAL_2 \
  207. declval<BOOST_ASIO_MOVE_ARG(T1)>(), declval<BOOST_ASIO_MOVE_ARG(T2)>()
  208. # define BOOST_ASIO_VARIADIC_MOVE_DECLVAL_3 \
  209. declval<BOOST_ASIO_MOVE_ARG(T1)>(), declval<BOOST_ASIO_MOVE_ARG(T2)>(), \
  210. declval<BOOST_ASIO_MOVE_ARG(T3)>()
  211. # define BOOST_ASIO_VARIADIC_MOVE_DECLVAL_4 \
  212. declval<BOOST_ASIO_MOVE_ARG(T1)>(), declval<BOOST_ASIO_MOVE_ARG(T2)>(), \
  213. declval<BOOST_ASIO_MOVE_ARG(T3)>(), declval<BOOST_ASIO_MOVE_ARG(T4)>()
  214. # define BOOST_ASIO_VARIADIC_MOVE_DECLVAL_5 \
  215. declval<BOOST_ASIO_MOVE_ARG(T1)>(), declval<BOOST_ASIO_MOVE_ARG(T2)>(), \
  216. declval<BOOST_ASIO_MOVE_ARG(T3)>(), declval<BOOST_ASIO_MOVE_ARG(T4)>(), \
  217. declval<BOOST_ASIO_MOVE_ARG(T5)>()
  218. # define BOOST_ASIO_VARIADIC_MOVE_DECLVAL_6 \
  219. declval<BOOST_ASIO_MOVE_ARG(T1)>(), declval<BOOST_ASIO_MOVE_ARG(T2)>(), \
  220. declval<BOOST_ASIO_MOVE_ARG(T3)>(), declval<BOOST_ASIO_MOVE_ARG(T4)>(), \
  221. declval<BOOST_ASIO_MOVE_ARG(T5)>(), declval<BOOST_ASIO_MOVE_ARG(T6)>()
  222. # define BOOST_ASIO_VARIADIC_MOVE_DECLVAL_7 \
  223. declval<BOOST_ASIO_MOVE_ARG(T1)>(), declval<BOOST_ASIO_MOVE_ARG(T2)>(), \
  224. declval<BOOST_ASIO_MOVE_ARG(T3)>(), declval<BOOST_ASIO_MOVE_ARG(T4)>(), \
  225. declval<BOOST_ASIO_MOVE_ARG(T5)>(), declval<BOOST_ASIO_MOVE_ARG(T6)>(), \
  226. declval<BOOST_ASIO_MOVE_ARG(T7)>()
  227. # define BOOST_ASIO_VARIADIC_MOVE_DECLVAL_8 \
  228. declval<BOOST_ASIO_MOVE_ARG(T1)>(), declval<BOOST_ASIO_MOVE_ARG(T2)>(), \
  229. declval<BOOST_ASIO_MOVE_ARG(T3)>(), declval<BOOST_ASIO_MOVE_ARG(T4)>(), \
  230. declval<BOOST_ASIO_MOVE_ARG(T5)>(), declval<BOOST_ASIO_MOVE_ARG(T6)>(), \
  231. declval<BOOST_ASIO_MOVE_ARG(T7)>(), declval<BOOST_ASIO_MOVE_ARG(T8)>()
  232. # define BOOST_ASIO_VARIADIC_DECAY(n) \
  233. BOOST_ASIO_VARIADIC_DECAY_##n
  234. # define BOOST_ASIO_VARIADIC_DECAY_1 \
  235. typename decay<T1>::type
  236. # define BOOST_ASIO_VARIADIC_DECAY_2 \
  237. typename decay<T1>::type, typename decay<T2>::type
  238. # define BOOST_ASIO_VARIADIC_DECAY_3 \
  239. typename decay<T1>::type, typename decay<T2>::type, \
  240. typename decay<T3>::type
  241. # define BOOST_ASIO_VARIADIC_DECAY_4 \
  242. typename decay<T1>::type, typename decay<T2>::type, \
  243. typename decay<T3>::type, typename decay<T4>::type
  244. # define BOOST_ASIO_VARIADIC_DECAY_5 \
  245. typename decay<T1>::type, typename decay<T2>::type, \
  246. typename decay<T3>::type, typename decay<T4>::type, \
  247. typename decay<T5>::type
  248. # define BOOST_ASIO_VARIADIC_DECAY_6 \
  249. typename decay<T1>::type, typename decay<T2>::type, \
  250. typename decay<T3>::type, typename decay<T4>::type, \
  251. typename decay<T5>::type, typename decay<T6>::type
  252. # define BOOST_ASIO_VARIADIC_DECAY_7 \
  253. typename decay<T1>::type, typename decay<T2>::type, \
  254. typename decay<T3>::type, typename decay<T4>::type, \
  255. typename decay<T5>::type, typename decay<T6>::type, \
  256. typename decay<T7>::type
  257. # define BOOST_ASIO_VARIADIC_DECAY_8 \
  258. typename decay<T1>::type, typename decay<T2>::type, \
  259. typename decay<T3>::type, typename decay<T4>::type, \
  260. typename decay<T5>::type, typename decay<T6>::type, \
  261. typename decay<T7>::type, typename decay<T8>::type
  262. # define BOOST_ASIO_VARIADIC_GENERATE(m) m(1) m(2) m(3) m(4) m(5) m(6) m(7) m(8)
  263. # define BOOST_ASIO_VARIADIC_GENERATE_5(m) m(1) m(2) m(3) m(4) m(5)
  264. #endif // !defined(BOOST_ASIO_HAS_VARIADIC_TEMPLATES)
  265. #endif // BOOST_ASIO_DETAIL_VARIADIC_TEMPLATES_HPP