group.hpp 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696
  1. // ----------------------------------------------------------------------------
  2. // group.hpp : encapsulates a group of manipulators along with an argument
  3. // ----------------------------------------------------------------------------
  4. // Copyright Samuel Krempp 2003. Use, modification, and distribution are
  5. // subject to the Boost Software License, Version 1.0. (See accompanying
  6. // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  7. // See http://www.boost.org/libs/format for library home page
  8. // ----------------------------------------------------------------------------
  9. // group_head : cut the last element of a group out.
  10. // (is overloaded below on each type of group)
  11. // group_last : returns the last element of a group
  12. // (is overloaded below on each type of group)
  13. // ----------------------------------------------------------------------------
  14. #ifndef BOOST_FORMAT_GROUP_HPP
  15. #define BOOST_FORMAT_GROUP_HPP
  16. #include <boost/config.hpp>
  17. namespace boost {
  18. namespace io {
  19. namespace detail {
  20. // empty group, but useful even though.
  21. struct group0
  22. {
  23. group0() {}
  24. };
  25. template <class Ch, class Tr>
  26. inline
  27. BOOST_IO_STD basic_ostream<Ch, Tr>&
  28. operator << ( BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  29. const group0& )
  30. {
  31. return os;
  32. }
  33. template <class T1>
  34. struct group1
  35. {
  36. T1 a1_;
  37. group1(T1 a1)
  38. : a1_(a1)
  39. {}
  40. group1(const group1&) = default;
  41. group1& operator=(const group1&) = delete;
  42. };
  43. template <class Ch, class Tr, class T1>
  44. inline
  45. BOOST_IO_STD basic_ostream<Ch, Tr>&
  46. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  47. const group1<T1>& x)
  48. {
  49. os << x.a1_;
  50. return os;
  51. }
  52. template <class T1,class T2>
  53. struct group2
  54. {
  55. T1 a1_;
  56. T2 a2_;
  57. group2(T1 a1,T2 a2)
  58. : a1_(a1),a2_(a2)
  59. {}
  60. group2(const group2&) = default;
  61. group2& operator=(const group2&) = delete;
  62. };
  63. template <class Ch, class Tr, class T1,class T2>
  64. inline
  65. BOOST_IO_STD basic_ostream<Ch, Tr>&
  66. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  67. const group2<T1,T2>& x)
  68. {
  69. os << x.a1_<< x.a2_;
  70. return os;
  71. }
  72. template <class T1,class T2,class T3>
  73. struct group3
  74. {
  75. T1 a1_;
  76. T2 a2_;
  77. T3 a3_;
  78. group3(T1 a1,T2 a2,T3 a3)
  79. : a1_(a1),a2_(a2),a3_(a3)
  80. {}
  81. group3(const group3&) = default;
  82. group3& operator=(const group3&) = delete;
  83. };
  84. template <class Ch, class Tr, class T1,class T2,class T3>
  85. inline
  86. BOOST_IO_STD basic_ostream<Ch, Tr>&
  87. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  88. const group3<T1,T2,T3>& x)
  89. {
  90. os << x.a1_<< x.a2_<< x.a3_;
  91. return os;
  92. }
  93. template <class T1,class T2,class T3,class T4>
  94. struct group4
  95. {
  96. T1 a1_;
  97. T2 a2_;
  98. T3 a3_;
  99. T4 a4_;
  100. group4(T1 a1,T2 a2,T3 a3,T4 a4)
  101. : a1_(a1),a2_(a2),a3_(a3),a4_(a4)
  102. {}
  103. group4(const group4&) = default;
  104. group4& operator=(const group4&) = delete;
  105. };
  106. template <class Ch, class Tr, class T1,class T2,class T3,class T4>
  107. inline
  108. BOOST_IO_STD basic_ostream<Ch, Tr>&
  109. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  110. const group4<T1,T2,T3,T4>& x)
  111. {
  112. os << x.a1_<< x.a2_<< x.a3_<< x.a4_;
  113. return os;
  114. }
  115. template <class T1,class T2,class T3,class T4,class T5>
  116. struct group5
  117. {
  118. T1 a1_;
  119. T2 a2_;
  120. T3 a3_;
  121. T4 a4_;
  122. T5 a5_;
  123. group5(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5)
  124. : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5)
  125. {}
  126. group5(const group5&) = default;
  127. group5& operator=(const group5&) = delete;
  128. };
  129. template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5>
  130. inline
  131. BOOST_IO_STD basic_ostream<Ch, Tr>&
  132. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  133. const group5<T1,T2,T3,T4,T5>& x)
  134. {
  135. os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_;
  136. return os;
  137. }
  138. template <class T1,class T2,class T3,class T4,class T5,class T6>
  139. struct group6
  140. {
  141. T1 a1_;
  142. T2 a2_;
  143. T3 a3_;
  144. T4 a4_;
  145. T5 a5_;
  146. T6 a6_;
  147. group6(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6)
  148. : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6)
  149. {}
  150. group6(const group6&) = default;
  151. group6& operator=(const group6&) = delete;
  152. };
  153. template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6>
  154. inline
  155. BOOST_IO_STD basic_ostream<Ch, Tr>&
  156. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  157. const group6<T1,T2,T3,T4,T5,T6>& x)
  158. {
  159. os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_;
  160. return os;
  161. }
  162. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
  163. struct group7
  164. {
  165. T1 a1_;
  166. T2 a2_;
  167. T3 a3_;
  168. T4 a4_;
  169. T5 a5_;
  170. T6 a6_;
  171. T7 a7_;
  172. group7(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7)
  173. : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7)
  174. {}
  175. group7(const group7&) = default;
  176. group7& operator=(const group7&) = delete;
  177. };
  178. template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7>
  179. inline
  180. BOOST_IO_STD basic_ostream<Ch, Tr>&
  181. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  182. const group7<T1,T2,T3,T4,T5,T6,T7>& x)
  183. {
  184. os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_;
  185. return os;
  186. }
  187. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
  188. struct group8
  189. {
  190. T1 a1_;
  191. T2 a2_;
  192. T3 a3_;
  193. T4 a4_;
  194. T5 a5_;
  195. T6 a6_;
  196. T7 a7_;
  197. T8 a8_;
  198. group8(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8)
  199. : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8)
  200. {}
  201. group8(const group8&) = default;
  202. group8& operator=(const group8&) = delete;
  203. };
  204. template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
  205. inline
  206. BOOST_IO_STD basic_ostream<Ch, Tr>&
  207. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  208. const group8<T1,T2,T3,T4,T5,T6,T7,T8>& x)
  209. {
  210. os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_;
  211. return os;
  212. }
  213. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
  214. struct group9
  215. {
  216. T1 a1_;
  217. T2 a2_;
  218. T3 a3_;
  219. T4 a4_;
  220. T5 a5_;
  221. T6 a6_;
  222. T7 a7_;
  223. T8 a8_;
  224. T9 a9_;
  225. group9(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9)
  226. : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8),a9_(a9)
  227. {}
  228. group9(const group9&) = default;
  229. group9& operator=(const group9&) = delete;
  230. };
  231. template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
  232. inline
  233. BOOST_IO_STD basic_ostream<Ch, Tr>&
  234. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  235. const group9<T1,T2,T3,T4,T5,T6,T7,T8,T9>& x)
  236. {
  237. os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_<< x.a9_;
  238. return os;
  239. }
  240. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
  241. struct group10
  242. {
  243. T1 a1_;
  244. T2 a2_;
  245. T3 a3_;
  246. T4 a4_;
  247. T5 a5_;
  248. T6 a6_;
  249. T7 a7_;
  250. T8 a8_;
  251. T9 a9_;
  252. T10 a10_;
  253. group10(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9,T10 a10)
  254. : a1_(a1),a2_(a2),a3_(a3),a4_(a4),a5_(a5),a6_(a6),a7_(a7),a8_(a8),a9_(a9),a10_(a10)
  255. {}
  256. group10(const group10&) = default;
  257. group10& operator=(const group10&) = delete;
  258. };
  259. template <class Ch, class Tr, class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
  260. inline
  261. BOOST_IO_STD basic_ostream<Ch, Tr>&
  262. operator << (BOOST_IO_STD basic_ostream<Ch, Tr>& os,
  263. const group10<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10>& x)
  264. {
  265. os << x.a1_<< x.a2_<< x.a3_<< x.a4_<< x.a5_<< x.a6_<< x.a7_<< x.a8_<< x.a9_<< x.a10_;
  266. return os;
  267. }
  268. template <class T1,class T2>
  269. inline
  270. group1<T1>
  271. group_head( group2<T1,T2> const& x)
  272. {
  273. return group1<T1> (x.a1_);
  274. }
  275. template <class T1,class T2>
  276. inline
  277. group1<T2>
  278. group_last( group2<T1,T2> const& x)
  279. {
  280. return group1<T2> (x.a2_);
  281. }
  282. template <class T1,class T2,class T3>
  283. inline
  284. group2<T1,T2>
  285. group_head( group3<T1,T2,T3> const& x)
  286. {
  287. return group2<T1,T2> (x.a1_,x.a2_);
  288. }
  289. template <class T1,class T2,class T3>
  290. inline
  291. group1<T3>
  292. group_last( group3<T1,T2,T3> const& x)
  293. {
  294. return group1<T3> (x.a3_);
  295. }
  296. template <class T1,class T2,class T3,class T4>
  297. inline
  298. group3<T1,T2,T3>
  299. group_head( group4<T1,T2,T3,T4> const& x)
  300. {
  301. return group3<T1,T2,T3> (x.a1_,x.a2_,x.a3_);
  302. }
  303. template <class T1,class T2,class T3,class T4>
  304. inline
  305. group1<T4>
  306. group_last( group4<T1,T2,T3,T4> const& x)
  307. {
  308. return group1<T4> (x.a4_);
  309. }
  310. template <class T1,class T2,class T3,class T4,class T5>
  311. inline
  312. group4<T1,T2,T3,T4>
  313. group_head( group5<T1,T2,T3,T4,T5> const& x)
  314. {
  315. return group4<T1,T2,T3,T4> (x.a1_,x.a2_,x.a3_,x.a4_);
  316. }
  317. template <class T1,class T2,class T3,class T4,class T5>
  318. inline
  319. group1<T5>
  320. group_last( group5<T1,T2,T3,T4,T5> const& x)
  321. {
  322. return group1<T5> (x.a5_);
  323. }
  324. template <class T1,class T2,class T3,class T4,class T5,class T6>
  325. inline
  326. group5<T1,T2,T3,T4,T5>
  327. group_head( group6<T1,T2,T3,T4,T5,T6> const& x)
  328. {
  329. return group5<T1,T2,T3,T4,T5> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_);
  330. }
  331. template <class T1,class T2,class T3,class T4,class T5,class T6>
  332. inline
  333. group1<T6>
  334. group_last( group6<T1,T2,T3,T4,T5,T6> const& x)
  335. {
  336. return group1<T6> (x.a6_);
  337. }
  338. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
  339. inline
  340. group6<T1,T2,T3,T4,T5,T6>
  341. group_head( group7<T1,T2,T3,T4,T5,T6,T7> const& x)
  342. {
  343. return group6<T1,T2,T3,T4,T5,T6> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_);
  344. }
  345. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7>
  346. inline
  347. group1<T7>
  348. group_last( group7<T1,T2,T3,T4,T5,T6,T7> const& x)
  349. {
  350. return group1<T7> (x.a7_);
  351. }
  352. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
  353. inline
  354. group7<T1,T2,T3,T4,T5,T6,T7>
  355. group_head( group8<T1,T2,T3,T4,T5,T6,T7,T8> const& x)
  356. {
  357. return group7<T1,T2,T3,T4,T5,T6,T7> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_);
  358. }
  359. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8>
  360. inline
  361. group1<T8>
  362. group_last( group8<T1,T2,T3,T4,T5,T6,T7,T8> const& x)
  363. {
  364. return group1<T8> (x.a8_);
  365. }
  366. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
  367. inline
  368. group8<T1,T2,T3,T4,T5,T6,T7,T8>
  369. group_head( group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> const& x)
  370. {
  371. return group8<T1,T2,T3,T4,T5,T6,T7,T8> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_);
  372. }
  373. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>
  374. inline
  375. group1<T9>
  376. group_last( group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> const& x)
  377. {
  378. return group1<T9> (x.a9_);
  379. }
  380. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
  381. inline
  382. group9<T1,T2,T3,T4,T5,T6,T7,T8,T9>
  383. group_head( group10<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> const& x)
  384. {
  385. return group9<T1,T2,T3,T4,T5,T6,T7,T8,T9> (x.a1_,x.a2_,x.a3_,x.a4_,x.a5_,x.a6_,x.a7_,x.a8_,x.a9_);
  386. }
  387. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9,class T10>
  388. inline
  389. group1<T10>
  390. group_last( group10<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> const& x)
  391. {
  392. return group1<T10> (x.a10_);
  393. }
  394. } // namespace detail
  395. // helper functions
  396. inline detail::group1< detail::group0 >
  397. group() { return detail::group1< detail::group0 > ( detail::group0() ); }
  398. template <class T1, class Var>
  399. inline
  400. detail::group1< detail::group2<T1, Var const&> >
  401. group(T1 a1, Var const& var)
  402. {
  403. return detail::group1< detail::group2<T1, Var const&> >
  404. ( detail::group2<T1, Var const&>
  405. (a1, var)
  406. );
  407. }
  408. template <class T1,class T2, class Var>
  409. inline
  410. detail::group1< detail::group3<T1,T2, Var const&> >
  411. group(T1 a1,T2 a2, Var const& var)
  412. {
  413. return detail::group1< detail::group3<T1,T2, Var const&> >
  414. ( detail::group3<T1,T2, Var const&>
  415. (a1,a2, var)
  416. );
  417. }
  418. template <class T1,class T2,class T3, class Var>
  419. inline
  420. detail::group1< detail::group4<T1,T2,T3, Var const&> >
  421. group(T1 a1,T2 a2,T3 a3, Var const& var)
  422. {
  423. return detail::group1< detail::group4<T1,T2,T3, Var const&> >
  424. ( detail::group4<T1,T2,T3, Var const&>
  425. (a1,a2,a3, var)
  426. );
  427. }
  428. template <class T1,class T2,class T3,class T4, class Var>
  429. inline
  430. detail::group1< detail::group5<T1,T2,T3,T4, Var const&> >
  431. group(T1 a1,T2 a2,T3 a3,T4 a4, Var const& var)
  432. {
  433. return detail::group1< detail::group5<T1,T2,T3,T4, Var const&> >
  434. ( detail::group5<T1,T2,T3,T4, Var const&>
  435. (a1,a2,a3,a4, var)
  436. );
  437. }
  438. template <class T1,class T2,class T3,class T4,class T5, class Var>
  439. inline
  440. detail::group1< detail::group6<T1,T2,T3,T4,T5, Var const&> >
  441. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var const& var)
  442. {
  443. return detail::group1< detail::group6<T1,T2,T3,T4,T5, Var const&> >
  444. ( detail::group6<T1,T2,T3,T4,T5, Var const&>
  445. (a1,a2,a3,a4,a5, var)
  446. );
  447. }
  448. template <class T1,class T2,class T3,class T4,class T5,class T6, class Var>
  449. inline
  450. detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var const&> >
  451. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var const& var)
  452. {
  453. return detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var const&> >
  454. ( detail::group7<T1,T2,T3,T4,T5,T6, Var const&>
  455. (a1,a2,a3,a4,a5,a6, var)
  456. );
  457. }
  458. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7, class Var>
  459. inline
  460. detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var const&> >
  461. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var const& var)
  462. {
  463. return detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var const&> >
  464. ( detail::group8<T1,T2,T3,T4,T5,T6,T7, Var const&>
  465. (a1,a2,a3,a4,a5,a6,a7, var)
  466. );
  467. }
  468. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8, class Var>
  469. inline
  470. detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var const&> >
  471. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, Var const& var)
  472. {
  473. return detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var const&> >
  474. ( detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var const&>
  475. (a1,a2,a3,a4,a5,a6,a7,a8, var)
  476. );
  477. }
  478. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9, class Var>
  479. inline
  480. detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var const&> >
  481. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9, Var const& var)
  482. {
  483. return detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var const&> >
  484. ( detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var const&>
  485. (a1,a2,a3,a4,a5,a6,a7,a8,a9, var)
  486. );
  487. }
  488. #ifndef BOOST_NO_OVERLOAD_FOR_NON_CONST
  489. template <class T1, class Var>
  490. inline
  491. detail::group1< detail::group2<T1, Var&> >
  492. group(T1 a1, Var& var)
  493. {
  494. return detail::group1< detail::group2<T1, Var&> >
  495. ( detail::group2<T1, Var&>
  496. (a1, var)
  497. );
  498. }
  499. template <class T1,class T2, class Var>
  500. inline
  501. detail::group1< detail::group3<T1,T2, Var&> >
  502. group(T1 a1,T2 a2, Var& var)
  503. {
  504. return detail::group1< detail::group3<T1,T2, Var&> >
  505. ( detail::group3<T1,T2, Var&>
  506. (a1,a2, var)
  507. );
  508. }
  509. template <class T1,class T2,class T3, class Var>
  510. inline
  511. detail::group1< detail::group4<T1,T2,T3, Var&> >
  512. group(T1 a1,T2 a2,T3 a3, Var& var)
  513. {
  514. return detail::group1< detail::group4<T1,T2,T3, Var&> >
  515. ( detail::group4<T1,T2,T3, Var&>
  516. (a1,a2,a3, var)
  517. );
  518. }
  519. template <class T1,class T2,class T3,class T4, class Var>
  520. inline
  521. detail::group1< detail::group5<T1,T2,T3,T4, Var&> >
  522. group(T1 a1,T2 a2,T3 a3,T4 a4, Var& var)
  523. {
  524. return detail::group1< detail::group5<T1,T2,T3,T4, Var&> >
  525. ( detail::group5<T1,T2,T3,T4, Var&>
  526. (a1,a2,a3,a4, var)
  527. );
  528. }
  529. template <class T1,class T2,class T3,class T4,class T5, class Var>
  530. inline
  531. detail::group1< detail::group6<T1,T2,T3,T4,T5, Var&> >
  532. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5, Var& var)
  533. {
  534. return detail::group1< detail::group6<T1,T2,T3,T4,T5, Var&> >
  535. ( detail::group6<T1,T2,T3,T4,T5, Var&>
  536. (a1,a2,a3,a4,a5, var)
  537. );
  538. }
  539. template <class T1,class T2,class T3,class T4,class T5,class T6, class Var>
  540. inline
  541. detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var&> >
  542. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6, Var& var)
  543. {
  544. return detail::group1< detail::group7<T1,T2,T3,T4,T5,T6, Var&> >
  545. ( detail::group7<T1,T2,T3,T4,T5,T6, Var&>
  546. (a1,a2,a3,a4,a5,a6, var)
  547. );
  548. }
  549. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7, class Var>
  550. inline
  551. detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var&> >
  552. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7, Var& var)
  553. {
  554. return detail::group1< detail::group8<T1,T2,T3,T4,T5,T6,T7, Var&> >
  555. ( detail::group8<T1,T2,T3,T4,T5,T6,T7, Var&>
  556. (a1,a2,a3,a4,a5,a6,a7, var)
  557. );
  558. }
  559. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8, class Var>
  560. inline
  561. detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var&> >
  562. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8, Var& var)
  563. {
  564. return detail::group1< detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var&> >
  565. ( detail::group9<T1,T2,T3,T4,T5,T6,T7,T8, Var&>
  566. (a1,a2,a3,a4,a5,a6,a7,a8, var)
  567. );
  568. }
  569. template <class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9, class Var>
  570. inline
  571. detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var&> >
  572. group(T1 a1,T2 a2,T3 a3,T4 a4,T5 a5,T6 a6,T7 a7,T8 a8,T9 a9, Var& var)
  573. {
  574. return detail::group1< detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var&> >
  575. ( detail::group10<T1,T2,T3,T4,T5,T6,T7,T8,T9, Var&>
  576. (a1,a2,a3,a4,a5,a6,a7,a8,a9, var)
  577. );
  578. }
  579. #endif // - BOOST_NO_OVERLOAD_FOR_NON_CONST
  580. } // namespace io
  581. } // namespace boost
  582. #endif // BOOST_FORMAT_GROUP_HPP