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