2 // Copyright Peter Dimov 2001
3 // Copyright Aleksey Gurtovoy 2001-2004
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)
10 // Preprocessed version of "boost/mpl/bind.hpp" header
11 // -- DO NOT modify by hand!
13 namespace boost { namespace mpl {
18 typename T, typename U1, typename U2, typename U3, typename U4
21 struct resolve_bind_arg
30 struct replace_unnamed_arg
39 struct replace_unnamed_arg< arg< -1 >, Arg >
41 typedef typename Arg::next next;
46 int N, typename U1, typename U2, typename U3, typename U4, typename U5
48 struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
50 typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
54 typename F, typename T1, typename T2, typename T3, typename T4
55 , typename T5, typename U1, typename U2, typename U3, typename U4
58 struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
60 typedef bind< F,T1,T2,T3,T4,T5 > f_;
61 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
67 typename F, int dummy_
72 typename U1 = na, typename U2 = na, typename U3 = na
73 , typename U4 = na, typename U5 = na
78 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
79 typedef typename r0::type a0;
80 typedef typename r0::next n1;
81 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
84 typedef typename apply_wrap0<
94 typename F, typename U1, typename U2, typename U3, typename U4
97 struct resolve_bind_arg<
98 bind0<F>, U1, U2, U3, U4, U5
102 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
107 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
108 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
111 typename F, int dummy_
113 struct bind< F,na,na,na,na,na >
119 typename F, typename T1, int dummy_
124 typename U1 = na, typename U2 = na, typename U3 = na
125 , typename U4 = na, typename U5 = na
130 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
131 typedef typename r0::type a0;
132 typedef typename r0::next n1;
133 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
135 typedef aux::replace_unnamed_arg< T1,n1 > r1;
136 typedef typename r1::type a1;
137 typedef typename r1::next n2;
138 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
141 typedef typename apply_wrap1<
152 typename F, typename T1, typename U1, typename U2, typename U3
153 , typename U4, typename U5
155 struct resolve_bind_arg<
156 bind1< F,T1 >, U1, U2, U3, U4, U5
159 typedef bind1< F,T1 > f_;
160 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
165 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
166 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
169 typename F, typename T1, int dummy_
171 struct bind< F,T1,na,na,na,na >
177 typename F, typename T1, typename T2, int dummy_
182 typename U1 = na, typename U2 = na, typename U3 = na
183 , typename U4 = na, typename U5 = na
188 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
189 typedef typename r0::type a0;
190 typedef typename r0::next n1;
191 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
193 typedef aux::replace_unnamed_arg< T1,n1 > r1;
194 typedef typename r1::type a1;
195 typedef typename r1::next n2;
196 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
198 typedef aux::replace_unnamed_arg< T2,n2 > r2;
199 typedef typename r2::type a2;
200 typedef typename r2::next n3;
201 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
204 typedef typename apply_wrap2<
206 , typename t1::type, typename t2::type
215 typename F, typename T1, typename T2, typename U1, typename U2
216 , typename U3, typename U4, typename U5
218 struct resolve_bind_arg<
219 bind2< F,T1,T2 >, U1, U2, U3, U4, U5
222 typedef bind2< F,T1,T2 > f_;
223 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
228 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
229 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
232 typename F, typename T1, typename T2, int dummy_
234 struct bind< F,T1,T2,na,na,na >
240 typename F, typename T1, typename T2, typename T3, int dummy_
245 typename U1 = na, typename U2 = na, typename U3 = na
246 , typename U4 = na, typename U5 = na
251 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
252 typedef typename r0::type a0;
253 typedef typename r0::next n1;
254 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
256 typedef aux::replace_unnamed_arg< T1,n1 > r1;
257 typedef typename r1::type a1;
258 typedef typename r1::next n2;
259 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
261 typedef aux::replace_unnamed_arg< T2,n2 > r2;
262 typedef typename r2::type a2;
263 typedef typename r2::next n3;
264 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
266 typedef aux::replace_unnamed_arg< T3,n3 > r3;
267 typedef typename r3::type a3;
268 typedef typename r3::next n4;
269 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
272 typedef typename apply_wrap3<
274 , typename t1::type, typename t2::type, typename t3::type
283 typename F, typename T1, typename T2, typename T3, typename U1
284 , typename U2, typename U3, typename U4, typename U5
286 struct resolve_bind_arg<
287 bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
290 typedef bind3< F,T1,T2,T3 > f_;
291 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
296 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
297 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
300 typename F, typename T1, typename T2, typename T3, int dummy_
302 struct bind< F,T1,T2,T3,na,na >
303 : bind3< F,T1,T2,T3 >
308 typename F, typename T1, typename T2, typename T3, typename T4
314 typename U1 = na, typename U2 = na, typename U3 = na
315 , typename U4 = na, typename U5 = na
320 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
321 typedef typename r0::type a0;
322 typedef typename r0::next n1;
323 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
325 typedef aux::replace_unnamed_arg< T1,n1 > r1;
326 typedef typename r1::type a1;
327 typedef typename r1::next n2;
328 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
330 typedef aux::replace_unnamed_arg< T2,n2 > r2;
331 typedef typename r2::type a2;
332 typedef typename r2::next n3;
333 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
335 typedef aux::replace_unnamed_arg< T3,n3 > r3;
336 typedef typename r3::type a3;
337 typedef typename r3::next n4;
338 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
340 typedef aux::replace_unnamed_arg< T4,n4 > r4;
341 typedef typename r4::type a4;
342 typedef typename r4::next n5;
343 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
346 typedef typename apply_wrap4<
348 , typename t1::type, typename t2::type, typename t3::type
358 typename F, typename T1, typename T2, typename T3, typename T4
359 , typename U1, typename U2, typename U3, typename U4, typename U5
361 struct resolve_bind_arg<
362 bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
365 typedef bind4< F,T1,T2,T3,T4 > f_;
366 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
371 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
372 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
375 typename F, typename T1, typename T2, typename T3, typename T4
378 struct bind< F,T1,T2,T3,T4,na >
379 : bind4< F,T1,T2,T3,T4 >
384 typename F, typename T1, typename T2, typename T3, typename T4
385 , typename T5, int dummy_
390 typename U1 = na, typename U2 = na, typename U3 = na
391 , typename U4 = na, typename U5 = na
396 typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
397 typedef typename r0::type a0;
398 typedef typename r0::next n1;
399 typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
401 typedef aux::replace_unnamed_arg< T1,n1 > r1;
402 typedef typename r1::type a1;
403 typedef typename r1::next n2;
404 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
406 typedef aux::replace_unnamed_arg< T2,n2 > r2;
407 typedef typename r2::type a2;
408 typedef typename r2::next n3;
409 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
411 typedef aux::replace_unnamed_arg< T3,n3 > r3;
412 typedef typename r3::type a3;
413 typedef typename r3::next n4;
414 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
416 typedef aux::replace_unnamed_arg< T4,n4 > r4;
417 typedef typename r4::type a4;
418 typedef typename r4::next n5;
419 typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
421 typedef aux::replace_unnamed_arg< T5,n5 > r5;
422 typedef typename r5::type a5;
423 typedef typename r5::next n6;
424 typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
427 typedef typename apply_wrap5<
429 , typename t1::type, typename t2::type, typename t3::type
430 , typename t4::type, typename t5::type
439 typename F, typename T1, typename T2, typename T3, typename T4
440 , typename T5, typename U1, typename U2, typename U3, typename U4
443 struct resolve_bind_arg<
444 bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
447 typedef bind5< F,T1,T2,T3,T4,T5 > f_;
448 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
453 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
454 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
456 /// primary template (not a specialization!)
459 typename F, typename T1, typename T2, typename T3, typename T4
460 , typename T5, int dummy_
463 : bind5< F,T1,T2,T3,T4,T5 >
467 /// if_/eval_if specializations
468 template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
471 template< typename T1, typename T2, typename T3 > struct if_;
474 typename Tag, typename T1, typename T2, typename T3
482 typename U1 = na, typename U2 = na, typename U3 = na
483 , typename U4 = na, typename U5 = na
488 typedef mpl::arg<1> n1;
489 typedef aux::replace_unnamed_arg< T1,n1 > r1;
490 typedef typename r1::type a1;
491 typedef typename r1::next n2;
492 typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
494 typedef aux::replace_unnamed_arg< T2,n2 > r2;
495 typedef typename r2::type a2;
496 typedef typename r2::next n3;
497 typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
499 typedef aux::replace_unnamed_arg< T3,n3 > r3;
500 typedef typename r3::type a3;
501 typedef typename r3::next n4;
502 typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
504 typedef typename if_<
510 typedef typename f_::type type;