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