Fixes for VS 2008
[dyninst.git] / external / boost / mpl / aux_ / preprocessed / msvc70 / 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< int N >\r
89 aux::yes_tag is_bind_helper(arg<N>*);\r
90 \r
91 template< bool is_ref_  = true >\r
92 struct is_bind_template_impl\r
93 {\r
94     template< typename T > struct result_\r
95     {\r
96         BOOST_STATIC_CONSTANT(bool, value  = false);\r
97     };\r
98 };\r
99 \r
100 template<>\r
101 struct is_bind_template_impl<false>\r
102 {\r
103     template< typename T > struct result_\r
104     {\r
105         BOOST_STATIC_CONSTANT(bool, value =\r
106               sizeof(aux::is_bind_helper(static_cast<T*>(0)))\r
107                 == sizeof(aux::yes_tag)\r
108             );\r
109     };\r
110 };\r
111 \r
112 template< typename T > struct is_bind_template\r
113     : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >\r
114         ::template result_<T>\r
115 {\r
116 };\r
117 \r
118 } // namespace aux\r
119 \r
120 template<\r
121       typename F\r
122     >\r
123 struct bind0\r
124 {\r
125     template<\r
126           typename U1 = na, typename U2 = na, typename U3 = na\r
127         , typename U4 = na, typename U5 = na\r
128         >\r
129     struct apply\r
130     {\r
131      private:\r
132         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
133         typedef typename r0::type a0;\r
134         typedef typename r0::next n1;\r
135         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
136         ///\r
137      public:\r
138         typedef typename apply_wrap0<\r
139               f_\r
140             >::type type;\r
141 \r
142     };\r
143 };\r
144 \r
145 namespace aux {\r
146 \r
147 template<\r
148       typename F\r
149     >\r
150 aux::yes_tag\r
151 is_bind_helper(bind0<F>*);\r
152 \r
153 } // namespace aux\r
154 \r
155 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)\r
156 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\r
157 \r
158 template<\r
159       typename F, typename T1\r
160     >\r
161 struct bind1\r
162 {\r
163     template<\r
164           typename U1 = na, typename U2 = na, typename U3 = na\r
165         , typename U4 = na, typename U5 = na\r
166         >\r
167     struct apply\r
168     {\r
169      private:\r
170         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
171         typedef typename r0::type a0;\r
172         typedef typename r0::next n1;\r
173         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
174         ///\r
175         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
176         typedef typename r1::type a1;\r
177         typedef typename r1::next n2;\r
178         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
179         ///\r
180      public:\r
181         typedef typename apply_wrap1<\r
182               f_\r
183             , typename t1::type\r
184             >::type type;\r
185 \r
186     };\r
187 };\r
188 \r
189 namespace aux {\r
190 \r
191 template<\r
192       typename F, typename T1\r
193     >\r
194 aux::yes_tag\r
195 is_bind_helper(bind1< F,T1 >*);\r
196 \r
197 } // namespace aux\r
198 \r
199 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)\r
200 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\r
201 \r
202 template<\r
203       typename F, typename T1, typename T2\r
204     >\r
205 struct bind2\r
206 {\r
207     template<\r
208           typename U1 = na, typename U2 = na, typename U3 = na\r
209         , typename U4 = na, typename U5 = na\r
210         >\r
211     struct apply\r
212     {\r
213      private:\r
214         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
215         typedef typename r0::type a0;\r
216         typedef typename r0::next n1;\r
217         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
218         ///\r
219         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
220         typedef typename r1::type a1;\r
221         typedef typename r1::next n2;\r
222         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
223         ///\r
224         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
225         typedef typename r2::type a2;\r
226         typedef typename r2::next n3;\r
227         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
228         ///\r
229      public:\r
230         typedef typename apply_wrap2<\r
231               f_\r
232             , typename t1::type, typename t2::type\r
233             >::type type;\r
234 \r
235     };\r
236 };\r
237 \r
238 namespace aux {\r
239 \r
240 template<\r
241       typename F, typename T1, typename T2\r
242     >\r
243 aux::yes_tag\r
244 is_bind_helper(bind2< F,T1,T2 >*);\r
245 \r
246 } // namespace aux\r
247 \r
248 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)\r
249 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\r
250 \r
251 template<\r
252       typename F, typename T1, typename T2, typename T3\r
253     >\r
254 struct bind3\r
255 {\r
256     template<\r
257           typename U1 = na, typename U2 = na, typename U3 = na\r
258         , typename U4 = na, typename U5 = na\r
259         >\r
260     struct apply\r
261     {\r
262      private:\r
263         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
264         typedef typename r0::type a0;\r
265         typedef typename r0::next n1;\r
266         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
267         ///\r
268         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
269         typedef typename r1::type a1;\r
270         typedef typename r1::next n2;\r
271         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
272         ///\r
273         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
274         typedef typename r2::type a2;\r
275         typedef typename r2::next n3;\r
276         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
277         ///\r
278         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
279         typedef typename r3::type a3;\r
280         typedef typename r3::next n4;\r
281         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
282         ///\r
283      public:\r
284         typedef typename apply_wrap3<\r
285               f_\r
286             , typename t1::type, typename t2::type, typename t3::type\r
287             >::type type;\r
288 \r
289     };\r
290 };\r
291 \r
292 namespace aux {\r
293 \r
294 template<\r
295       typename F, typename T1, typename T2, typename T3\r
296     >\r
297 aux::yes_tag\r
298 is_bind_helper(bind3< F,T1,T2,T3 >*);\r
299 \r
300 } // namespace aux\r
301 \r
302 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)\r
303 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\r
304 \r
305 template<\r
306       typename F, typename T1, typename T2, typename T3, typename T4\r
307     >\r
308 struct bind4\r
309 {\r
310     template<\r
311           typename U1 = na, typename U2 = na, typename U3 = na\r
312         , typename U4 = na, typename U5 = na\r
313         >\r
314     struct apply\r
315     {\r
316      private:\r
317         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
318         typedef typename r0::type a0;\r
319         typedef typename r0::next n1;\r
320         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
321         ///\r
322         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
323         typedef typename r1::type a1;\r
324         typedef typename r1::next n2;\r
325         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
326         ///\r
327         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
328         typedef typename r2::type a2;\r
329         typedef typename r2::next n3;\r
330         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
331         ///\r
332         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
333         typedef typename r3::type a3;\r
334         typedef typename r3::next n4;\r
335         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
336         ///\r
337         typedef aux::replace_unnamed_arg< T4,n4 > r4;\r
338         typedef typename r4::type a4;\r
339         typedef typename r4::next n5;\r
340         typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\r
341         ///\r
342      public:\r
343         typedef typename apply_wrap4<\r
344               f_\r
345             , typename t1::type, typename t2::type, typename t3::type\r
346             , typename t4::type\r
347             >::type type;\r
348 \r
349     };\r
350 };\r
351 \r
352 namespace aux {\r
353 \r
354 template<\r
355       typename F, typename T1, typename T2, typename T3, typename T4\r
356     >\r
357 aux::yes_tag\r
358 is_bind_helper(bind4< F,T1,T2,T3,T4 >*);\r
359 \r
360 } // namespace aux\r
361 \r
362 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)\r
363 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\r
364 \r
365 template<\r
366       typename F, typename T1, typename T2, typename T3, typename T4\r
367     , typename T5\r
368     >\r
369 struct bind5\r
370 {\r
371     template<\r
372           typename U1 = na, typename U2 = na, typename U3 = na\r
373         , typename U4 = na, typename U5 = na\r
374         >\r
375     struct apply\r
376     {\r
377      private:\r
378         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
379         typedef typename r0::type a0;\r
380         typedef typename r0::next n1;\r
381         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
382         ///\r
383         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
384         typedef typename r1::type a1;\r
385         typedef typename r1::next n2;\r
386         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
387         ///\r
388         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
389         typedef typename r2::type a2;\r
390         typedef typename r2::next n3;\r
391         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
392         ///\r
393         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
394         typedef typename r3::type a3;\r
395         typedef typename r3::next n4;\r
396         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
397         ///\r
398         typedef aux::replace_unnamed_arg< T4,n4 > r4;\r
399         typedef typename r4::type a4;\r
400         typedef typename r4::next n5;\r
401         typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\r
402         ///\r
403         typedef aux::replace_unnamed_arg< T5,n5 > r5;\r
404         typedef typename r5::type a5;\r
405         typedef typename r5::next n6;\r
406         typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\r
407         ///\r
408      public:\r
409         typedef typename apply_wrap5<\r
410               f_\r
411             , typename t1::type, typename t2::type, typename t3::type\r
412             , typename t4::type, typename t5::type\r
413             >::type type;\r
414 \r
415     };\r
416 };\r
417 \r
418 namespace aux {\r
419 \r
420 template<\r
421       typename F, typename T1, typename T2, typename T3, typename T4\r
422     , typename T5\r
423     >\r
424 aux::yes_tag\r
425 is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);\r
426 \r
427 } // namespace aux\r
428 \r
429 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)\r
430 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\r
431 }}\r
432 \r