Ugly, not-to-be-pushed sucking in of all of Boost to get windows to work.
[dyninst.git] / external / boost / mpl / aux_ / preprocessed / no_ctps / basic_bind.hpp
1
2 // Copyright Peter Dimov 2001
3 // Copyright Aleksey Gurtovoy 2001-2004
4 //
5 // Distributed under the Boost Software License, Version 1.0. 
6 // (See accompanying file LICENSE_1_0.txt or copy at 
7 // http://www.boost.org/LICENSE_1_0.txt)
8 //
9
10 // Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header
11 // -- DO NOT modify by hand!
12
13 namespace boost { namespace mpl {
14
15 namespace aux {
16 template< bool >
17 struct resolve_arg_impl
18 {
19     template<
20           typename T, typename U1, typename U2, typename U3
21         , typename U4, typename U5
22         >
23     struct result_
24     {
25         typedef T type;
26     };
27 };
28
29 template<>
30 struct resolve_arg_impl<true>
31 {
32     template<
33           typename T, typename U1, typename U2, typename U3
34         , typename U4, typename U5
35         >
36     struct result_
37     {
38         typedef typename apply_wrap5<
39               T
40             , U1, U2, U3, U4, U5
41             >::type type;
42     };
43 };
44
45 template< typename T > struct is_bind_template;
46
47 template<
48       typename T, typename U1, typename U2, typename U3, typename U4
49     , typename U5
50     >
51 struct resolve_bind_arg
52     : resolve_arg_impl< is_bind_template<T>::value >
53             ::template result_< T,U1,U2,U3,U4,U5 >
54 {
55 };
56
57 template< int arity_ > struct bind_chooser;
58
59 aux::no_tag is_bind_helper(...);
60 template< typename T > aux::no_tag is_bind_helper(protect<T>*);
61
62 template<
63       typename F, typename T1, typename T2, typename T3, typename T4
64     , typename T5
65     >
66 aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);
67
68 template< int N >
69 aux::yes_tag is_bind_helper(arg<N>*);
70
71 template< bool is_ref_  = true >
72 struct is_bind_template_impl
73 {
74     template< typename T > struct result_
75     {
76         BOOST_STATIC_CONSTANT(bool, value  = false);
77     };
78 };
79
80 template<>
81 struct is_bind_template_impl<false>
82 {
83     template< typename T > struct result_
84     {
85         BOOST_STATIC_CONSTANT(bool, value =
86               sizeof(aux::is_bind_helper(static_cast<T*>(0)))
87                 == sizeof(aux::yes_tag)
88             );
89     };
90 };
91
92 template< typename T > struct is_bind_template
93     : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
94         ::template result_<T>
95 {
96 };
97
98 } // namespace aux
99
100 template<
101       typename F
102     >
103 struct bind0
104 {
105     template<
106           typename U1 = na, typename U2 = na, typename U3 = na
107         , typename U4 = na, typename U5 = na
108         >
109     struct apply
110     {
111      private:
112         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
113
114      public:
115         typedef typename apply_wrap0<
116               f_
117             >::type type;
118
119     };
120 };
121
122 namespace aux {
123
124 template<
125       typename F
126     >
127 aux::yes_tag
128 is_bind_helper(bind0<F>*);
129
130 } // namespace aux
131
132 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
133 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
134
135 namespace aux {
136
137 template<>
138 struct bind_chooser<0>
139 {
140     template<
141           typename F, typename T1, typename T2, typename T3, typename T4
142         , typename T5
143         >
144     struct result_
145     {
146         typedef bind0<F> type;
147     };
148 };
149
150 } // namespace aux
151
152 template<
153       typename F, typename T1
154     >
155 struct bind1
156 {
157     template<
158           typename U1 = na, typename U2 = na, typename U3 = na
159         , typename U4 = na, typename U5 = na
160         >
161     struct apply
162     {
163      private:
164         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
165         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
166
167      public:
168         typedef typename apply_wrap1<
169               f_
170             , typename t1::type
171             >::type type;
172
173     };
174 };
175
176 namespace aux {
177
178 template<
179       typename F, typename T1
180     >
181 aux::yes_tag
182 is_bind_helper(bind1< F,T1 >*);
183
184 } // namespace aux
185
186 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
187 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
188
189 namespace aux {
190
191 template<>
192 struct bind_chooser<1>
193 {
194     template<
195           typename F, typename T1, typename T2, typename T3, typename T4
196         , typename T5
197         >
198     struct result_
199     {
200         typedef bind1< F,T1 > type;
201     };
202 };
203
204 } // namespace aux
205
206 template<
207       typename F, typename T1, typename T2
208     >
209 struct bind2
210 {
211     template<
212           typename U1 = na, typename U2 = na, typename U3 = na
213         , typename U4 = na, typename U5 = na
214         >
215     struct apply
216     {
217      private:
218         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
219         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
220         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
221
222      public:
223         typedef typename apply_wrap2<
224               f_
225             , typename t1::type, typename t2::type
226             >::type type;
227
228     };
229 };
230
231 namespace aux {
232
233 template<
234       typename F, typename T1, typename T2
235     >
236 aux::yes_tag
237 is_bind_helper(bind2< F,T1,T2 >*);
238
239 } // namespace aux
240
241 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
242 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
243
244 namespace aux {
245
246 template<>
247 struct bind_chooser<2>
248 {
249     template<
250           typename F, typename T1, typename T2, typename T3, typename T4
251         , typename T5
252         >
253     struct result_
254     {
255         typedef bind2< F,T1,T2 > type;
256     };
257 };
258
259 } // namespace aux
260
261 template<
262       typename F, typename T1, typename T2, typename T3
263     >
264 struct bind3
265 {
266     template<
267           typename U1 = na, typename U2 = na, typename U3 = na
268         , typename U4 = na, typename U5 = na
269         >
270     struct apply
271     {
272      private:
273         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
274         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
275         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
276         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
277
278      public:
279         typedef typename apply_wrap3<
280               f_
281             , typename t1::type, typename t2::type, typename t3::type
282             >::type type;
283
284     };
285 };
286
287 namespace aux {
288
289 template<
290       typename F, typename T1, typename T2, typename T3
291     >
292 aux::yes_tag
293 is_bind_helper(bind3< F,T1,T2,T3 >*);
294
295 } // namespace aux
296
297 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
298 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
299
300 namespace aux {
301
302 template<>
303 struct bind_chooser<3>
304 {
305     template<
306           typename F, typename T1, typename T2, typename T3, typename T4
307         , typename T5
308         >
309     struct result_
310     {
311         typedef bind3< F,T1,T2,T3 > type;
312     };
313 };
314
315 } // namespace aux
316
317 template<
318       typename F, typename T1, typename T2, typename T3, typename T4
319     >
320 struct bind4
321 {
322     template<
323           typename U1 = na, typename U2 = na, typename U3 = na
324         , typename U4 = na, typename U5 = na
325         >
326     struct apply
327     {
328      private:
329         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
330         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
331         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
332         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
333         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
334
335      public:
336         typedef typename apply_wrap4<
337               f_
338             , typename t1::type, typename t2::type, typename t3::type
339             , typename t4::type
340             >::type type;
341
342     };
343 };
344
345 namespace aux {
346
347 template<
348       typename F, typename T1, typename T2, typename T3, typename T4
349     >
350 aux::yes_tag
351 is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
352
353 } // namespace aux
354
355 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
356 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
357
358 namespace aux {
359
360 template<>
361 struct bind_chooser<4>
362 {
363     template<
364           typename F, typename T1, typename T2, typename T3, typename T4
365         , typename T5
366         >
367     struct result_
368     {
369         typedef bind4< F,T1,T2,T3,T4 > type;
370     };
371 };
372
373 } // namespace aux
374
375 template<
376       typename F, typename T1, typename T2, typename T3, typename T4
377     , typename T5
378     >
379 struct bind5
380 {
381     template<
382           typename U1 = na, typename U2 = na, typename U3 = na
383         , typename U4 = na, typename U5 = na
384         >
385     struct apply
386     {
387      private:
388         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
389         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
390         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
391         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
392         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
393         typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
394
395      public:
396         typedef typename apply_wrap5<
397               f_
398             , typename t1::type, typename t2::type, typename t3::type
399             , typename t4::type, typename t5::type
400             >::type type;
401
402     };
403 };
404
405 namespace aux {
406
407 template<
408       typename F, typename T1, typename T2, typename T3, typename T4
409     , typename T5
410     >
411 aux::yes_tag
412 is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
413
414 } // namespace aux
415
416 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
417 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
418
419 namespace aux {
420
421 template<>
422 struct bind_chooser<5>
423 {
424     template<
425           typename F, typename T1, typename T2, typename T3, typename T4
426         , typename T5
427         >
428     struct result_
429     {
430         typedef bind5< F,T1,T2,T3,T4,T5 > type;
431     };
432 };
433
434 } // namespace aux
435
436 namespace aux {
437
438 template< typename T >
439 struct is_bind_arg
440 {
441     BOOST_STATIC_CONSTANT(bool, value  = true);
442 };
443
444 template<>
445 struct is_bind_arg<na>
446 {
447     BOOST_STATIC_CONSTANT(bool, value  = false);
448 };
449
450 template<
451       typename T1, typename T2, typename T3, typename T4, typename T5
452     >
453 struct bind_count_args
454 {
455     BOOST_STATIC_CONSTANT(int, value =
456           is_bind_arg<T1>::value + is_bind_arg<T2>::value 
457         + is_bind_arg<T3>::value + is_bind_arg<T4>::value 
458         + is_bind_arg<T5>::value
459         );
460
461 };
462
463 }
464
465 template<
466       typename F, typename T1, typename T2, typename T3, typename T4
467     , typename T5
468     >
469 struct bind
470     : aux::bind_chooser<
471           aux::bind_count_args< T1,T2,T3,T4,T5 >::value
472         >::template result_< F,T1,T2,T3,T4,T5 >::type
473 {
474 };
475
476 BOOST_MPL_AUX_ARITY_SPEC(
477       6
478     , bind
479     )
480
481 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(
482       6
483     , bind
484     )
485 }}
486