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