Fixes for VS 2008
[dyninst.git] / external / boost / mpl / aux_ / preprocessed / gcc / bind.hpp
1 \r
2 // Copyright Peter Dimov 2001\r
3 // Copyright Aleksey Gurtovoy 2001-2004\r
4 //\r
5 // Distributed under the Boost Software License, Version 1.0. \r
6 // (See accompanying file LICENSE_1_0.txt or copy at \r
7 // http://www.boost.org/LICENSE_1_0.txt)\r
8 //\r
9 \r
10 // Preprocessed version of "boost/mpl/bind.hpp" header\r
11 // -- DO NOT modify by hand!\r
12 \r
13 namespace boost { namespace mpl {\r
14 \r
15 namespace aux {\r
16 \r
17 template<\r
18       typename T, typename U1, typename U2, typename U3, typename U4\r
19     , typename U5\r
20     >\r
21 struct resolve_bind_arg\r
22 {\r
23     typedef T type;\r
24 };\r
25 \r
26 template<\r
27       typename T\r
28     , typename Arg\r
29     >\r
30 struct replace_unnamed_arg\r
31 {\r
32     typedef Arg next;\r
33     typedef T type;\r
34 };\r
35 \r
36 template<\r
37       typename Arg\r
38     >\r
39 struct replace_unnamed_arg< arg< -1 >, Arg >\r
40 {\r
41     typedef typename Arg::next next;\r
42     typedef Arg type;\r
43 };\r
44 \r
45 template<\r
46       int N, typename U1, typename U2, typename U3, typename U4, typename U5\r
47     >\r
48 struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\r
49 {\r
50     typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\r
51 };\r
52 \r
53 template<\r
54       typename F, typename T1, typename T2, typename T3, typename T4\r
55     , typename T5, typename U1, typename U2, typename U3, typename U4\r
56     , typename U5\r
57     >\r
58 struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\r
59 {\r
60     typedef bind< F,T1,T2,T3,T4,T5 > f_;\r
61     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
62 };\r
63 \r
64 } // namespace aux\r
65 \r
66 template<\r
67       typename F\r
68     >\r
69 struct bind0\r
70 {\r
71     template<\r
72           typename U1 = na, typename U2 = na, typename U3 = na\r
73         , typename U4 = na, typename U5 = na\r
74         >\r
75     struct apply\r
76     {\r
77      private:\r
78         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
79         typedef typename r0::type a0;\r
80         typedef typename r0::next n1;\r
81         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
82         ///\r
83      public:\r
84         typedef typename apply_wrap0<\r
85               f_\r
86             >::type type;\r
87 \r
88     };\r
89 };\r
90 \r
91 namespace aux {\r
92 \r
93 template<\r
94       typename F, typename U1, typename U2, typename U3, typename U4\r
95     , typename U5\r
96     >\r
97 struct resolve_bind_arg<\r
98       bind0<F>, U1, U2, U3, U4, U5\r
99     >\r
100 {\r
101     typedef bind0<F> f_;\r
102     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
103 };\r
104 \r
105 } // namespace aux\r
106 \r
107 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)\r
108 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\r
109 \r
110 template<\r
111       typename F\r
112     >\r
113 struct bind< F,na,na,na,na,na >\r
114     : bind0<F>\r
115 {\r
116 };\r
117 \r
118 template<\r
119       typename F, typename T1\r
120     >\r
121 struct bind1\r
122 {\r
123     template<\r
124           typename U1 = na, typename U2 = na, typename U3 = na\r
125         , typename U4 = na, typename U5 = na\r
126         >\r
127     struct apply\r
128     {\r
129      private:\r
130         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
131         typedef typename r0::type a0;\r
132         typedef typename r0::next n1;\r
133         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
134         ///\r
135         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
136         typedef typename r1::type a1;\r
137         typedef typename r1::next n2;\r
138         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
139         ///\r
140      public:\r
141         typedef typename apply_wrap1<\r
142               f_\r
143             , typename t1::type\r
144             >::type type;\r
145 \r
146     };\r
147 };\r
148 \r
149 namespace aux {\r
150 \r
151 template<\r
152       typename F, typename T1, typename U1, typename U2, typename U3\r
153     , typename U4, typename U5\r
154     >\r
155 struct resolve_bind_arg<\r
156       bind1< F,T1 >, U1, U2, U3, U4, U5\r
157     >\r
158 {\r
159     typedef bind1< F,T1 > f_;\r
160     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
161 };\r
162 \r
163 } // namespace aux\r
164 \r
165 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)\r
166 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\r
167 \r
168 template<\r
169       typename F, typename T1\r
170     >\r
171 struct bind< F,T1,na,na,na,na >\r
172     : bind1< F,T1 >\r
173 {\r
174 };\r
175 \r
176 template<\r
177       typename F, typename T1, typename T2\r
178     >\r
179 struct bind2\r
180 {\r
181     template<\r
182           typename U1 = na, typename U2 = na, typename U3 = na\r
183         , typename U4 = na, typename U5 = na\r
184         >\r
185     struct apply\r
186     {\r
187      private:\r
188         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
189         typedef typename r0::type a0;\r
190         typedef typename r0::next n1;\r
191         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
192         ///\r
193         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
194         typedef typename r1::type a1;\r
195         typedef typename r1::next n2;\r
196         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
197         ///\r
198         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
199         typedef typename r2::type a2;\r
200         typedef typename r2::next n3;\r
201         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
202         ///\r
203      public:\r
204         typedef typename apply_wrap2<\r
205               f_\r
206             , typename t1::type, typename t2::type\r
207             >::type type;\r
208 \r
209     };\r
210 };\r
211 \r
212 namespace aux {\r
213 \r
214 template<\r
215       typename F, typename T1, typename T2, typename U1, typename U2\r
216     , typename U3, typename U4, typename U5\r
217     >\r
218 struct resolve_bind_arg<\r
219       bind2< F,T1,T2 >, U1, U2, U3, U4, U5\r
220     >\r
221 {\r
222     typedef bind2< F,T1,T2 > f_;\r
223     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
224 };\r
225 \r
226 } // namespace aux\r
227 \r
228 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)\r
229 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\r
230 \r
231 template<\r
232       typename F, typename T1, typename T2\r
233     >\r
234 struct bind< F,T1,T2,na,na,na >\r
235     : bind2< F,T1,T2 >\r
236 {\r
237 };\r
238 \r
239 template<\r
240       typename F, typename T1, typename T2, typename T3\r
241     >\r
242 struct bind3\r
243 {\r
244     template<\r
245           typename U1 = na, typename U2 = na, typename U3 = na\r
246         , typename U4 = na, typename U5 = na\r
247         >\r
248     struct apply\r
249     {\r
250      private:\r
251         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
252         typedef typename r0::type a0;\r
253         typedef typename r0::next n1;\r
254         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
255         ///\r
256         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
257         typedef typename r1::type a1;\r
258         typedef typename r1::next n2;\r
259         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
260         ///\r
261         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
262         typedef typename r2::type a2;\r
263         typedef typename r2::next n3;\r
264         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
265         ///\r
266         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
267         typedef typename r3::type a3;\r
268         typedef typename r3::next n4;\r
269         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
270         ///\r
271      public:\r
272         typedef typename apply_wrap3<\r
273               f_\r
274             , typename t1::type, typename t2::type, typename t3::type\r
275             >::type type;\r
276 \r
277     };\r
278 };\r
279 \r
280 namespace aux {\r
281 \r
282 template<\r
283       typename F, typename T1, typename T2, typename T3, typename U1\r
284     , typename U2, typename U3, typename U4, typename U5\r
285     >\r
286 struct resolve_bind_arg<\r
287       bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\r
288     >\r
289 {\r
290     typedef bind3< F,T1,T2,T3 > f_;\r
291     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
292 };\r
293 \r
294 } // namespace aux\r
295 \r
296 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)\r
297 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\r
298 \r
299 template<\r
300       typename F, typename T1, typename T2, typename T3\r
301     >\r
302 struct bind< F,T1,T2,T3,na,na >\r
303     : bind3< F,T1,T2,T3 >\r
304 {\r
305 };\r
306 \r
307 template<\r
308       typename F, typename T1, typename T2, typename T3, typename T4\r
309     >\r
310 struct bind4\r
311 {\r
312     template<\r
313           typename U1 = na, typename U2 = na, typename U3 = na\r
314         , typename U4 = na, typename U5 = na\r
315         >\r
316     struct apply\r
317     {\r
318      private:\r
319         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
320         typedef typename r0::type a0;\r
321         typedef typename r0::next n1;\r
322         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
323         ///\r
324         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
325         typedef typename r1::type a1;\r
326         typedef typename r1::next n2;\r
327         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
328         ///\r
329         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
330         typedef typename r2::type a2;\r
331         typedef typename r2::next n3;\r
332         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
333         ///\r
334         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
335         typedef typename r3::type a3;\r
336         typedef typename r3::next n4;\r
337         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
338         ///\r
339         typedef aux::replace_unnamed_arg< T4,n4 > r4;\r
340         typedef typename r4::type a4;\r
341         typedef typename r4::next n5;\r
342         typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\r
343         ///\r
344      public:\r
345         typedef typename apply_wrap4<\r
346               f_\r
347             , typename t1::type, typename t2::type, typename t3::type\r
348             , typename t4::type\r
349             >::type type;\r
350 \r
351     };\r
352 };\r
353 \r
354 namespace aux {\r
355 \r
356 template<\r
357       typename F, typename T1, typename T2, typename T3, typename T4\r
358     , typename U1, typename U2, typename U3, typename U4, typename U5\r
359     >\r
360 struct resolve_bind_arg<\r
361       bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\r
362     >\r
363 {\r
364     typedef bind4< F,T1,T2,T3,T4 > f_;\r
365     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
366 };\r
367 \r
368 } // namespace aux\r
369 \r
370 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)\r
371 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\r
372 \r
373 template<\r
374       typename F, typename T1, typename T2, typename T3, typename T4\r
375     >\r
376 struct bind< F,T1,T2,T3,T4,na >\r
377     : bind4< F,T1,T2,T3,T4 >\r
378 {\r
379 };\r
380 \r
381 template<\r
382       typename F, typename T1, typename T2, typename T3, typename T4\r
383     , typename T5\r
384     >\r
385 struct bind5\r
386 {\r
387     template<\r
388           typename U1 = na, typename U2 = na, typename U3 = na\r
389         , typename U4 = na, typename U5 = na\r
390         >\r
391     struct apply\r
392     {\r
393      private:\r
394         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
395         typedef typename r0::type a0;\r
396         typedef typename r0::next n1;\r
397         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
398         ///\r
399         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
400         typedef typename r1::type a1;\r
401         typedef typename r1::next n2;\r
402         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
403         ///\r
404         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
405         typedef typename r2::type a2;\r
406         typedef typename r2::next n3;\r
407         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
408         ///\r
409         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
410         typedef typename r3::type a3;\r
411         typedef typename r3::next n4;\r
412         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
413         ///\r
414         typedef aux::replace_unnamed_arg< T4,n4 > r4;\r
415         typedef typename r4::type a4;\r
416         typedef typename r4::next n5;\r
417         typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\r
418         ///\r
419         typedef aux::replace_unnamed_arg< T5,n5 > r5;\r
420         typedef typename r5::type a5;\r
421         typedef typename r5::next n6;\r
422         typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\r
423         ///\r
424      public:\r
425         typedef typename apply_wrap5<\r
426               f_\r
427             , typename t1::type, typename t2::type, typename t3::type\r
428             , typename t4::type, typename t5::type\r
429             >::type type;\r
430 \r
431     };\r
432 };\r
433 \r
434 namespace aux {\r
435 \r
436 template<\r
437       typename F, typename T1, typename T2, typename T3, typename T4\r
438     , typename T5, typename U1, typename U2, typename U3, typename U4\r
439     , typename U5\r
440     >\r
441 struct resolve_bind_arg<\r
442       bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\r
443     >\r
444 {\r
445     typedef bind5< F,T1,T2,T3,T4,T5 > f_;\r
446     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
447 };\r
448 \r
449 } // namespace aux\r
450 \r
451 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)\r
452 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\r
453 \r
454 /// primary template (not a specialization!)\r
455 \r
456 template<\r
457       typename F, typename T1, typename T2, typename T3, typename T4\r
458     , typename T5\r
459     >\r
460 struct bind\r
461     : bind5< F,T1,T2,T3,T4,T5 >\r
462 {\r
463 };\r
464 \r
465 /// if_/eval_if specializations\r
466 template< template< typename T1, typename T2, typename T3 > class F, typename Tag >\r
467 struct quote3;\r
468 \r
469 template< typename T1, typename T2, typename T3 > struct if_;\r
470 \r
471 template<\r
472       typename Tag, typename T1, typename T2, typename T3\r
473     >\r
474 struct bind3<\r
475       quote3< if_,Tag >\r
476     , T1, T2, T3\r
477     >\r
478 {\r
479     template<\r
480           typename U1 = na, typename U2 = na, typename U3 = na\r
481         , typename U4 = na, typename U5 = na\r
482         >\r
483     struct apply\r
484     {\r
485      private:\r
486         typedef mpl::arg<1> n1;\r
487         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
488         typedef typename r1::type a1;\r
489         typedef typename r1::next n2;\r
490         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
491         ///\r
492         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
493         typedef typename r2::type a2;\r
494         typedef typename r2::next n3;\r
495         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
496         ///\r
497         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
498         typedef typename r3::type a3;\r
499         typedef typename r3::next n4;\r
500         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
501         ///\r
502         typedef typename if_<\r
503               typename t1::type\r
504             , t2, t3\r
505             >::type f_;\r
506 \r
507      public:\r
508         typedef typename f_::type type;\r
509     };\r
510 };\r
511 \r
512 template<\r
513       template< typename T1, typename T2, typename T3 > class F, typename Tag\r
514     >\r
515 struct quote3;\r
516 \r
517 template< typename T1, typename T2, typename T3 > struct eval_if;\r
518 \r
519 template<\r
520       typename Tag, typename T1, typename T2, typename T3\r
521     >\r
522 struct bind3<\r
523       quote3< eval_if,Tag >\r
524     , T1, T2, T3\r
525     >\r
526 {\r
527     template<\r
528           typename U1 = na, typename U2 = na, typename U3 = na\r
529         , typename U4 = na, typename U5 = na\r
530         >\r
531     struct apply\r
532     {\r
533      private:\r
534         typedef mpl::arg<1> n1;\r
535         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
536         typedef typename r1::type a1;\r
537         typedef typename r1::next n2;\r
538         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
539         ///\r
540         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
541         typedef typename r2::type a2;\r
542         typedef typename r2::next n3;\r
543         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
544         ///\r
545         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
546         typedef typename r3::type a3;\r
547         typedef typename r3::next n4;\r
548         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
549         ///\r
550         typedef typename eval_if<\r
551               typename t1::type\r
552             , t2, t3\r
553             >::type f_;\r
554 \r
555      public:\r
556         typedef typename f_::type type;\r
557     };\r
558 };\r
559 \r
560 }}\r
561 \r