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