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/aux_/basic_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
27 int N, typename U1, typename U2, typename U3, typename U4, typename U5
29 struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >
31 typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;
35 typename F, typename T1, typename T2, typename T3, typename T4
36 , typename T5, typename U1, typename U2, typename U3, typename U4
39 struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >
41 typedef bind< F,T1,T2,T3,T4,T5 > f_;
42 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
53 typename U1 = na, typename U2 = na, typename U3 = na
54 , typename U4 = na, typename U5 = na
59 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
62 typedef typename apply_wrap0<
72 typename F, typename U1, typename U2, typename U3, typename U4
75 struct resolve_bind_arg<
76 bind0<F>, U1, U2, U3, U4, U5
80 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
85 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
86 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
91 struct bind< F,na,na,na,na,na >
97 typename F, typename T1
102 typename U1 = na, typename U2 = na, typename U3 = na
103 , typename U4 = na, typename U5 = na
108 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
109 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
112 typedef typename apply_wrap1<
123 typename F, typename T1, typename U1, typename U2, typename U3
124 , typename U4, typename U5
126 struct resolve_bind_arg<
127 bind1< F,T1 >, U1, U2, U3, U4, U5
130 typedef bind1< F,T1 > f_;
131 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
136 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
137 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
140 typename F, typename T1
142 struct bind< F,T1,na,na,na,na >
148 typename F, typename T1, typename T2
153 typename U1 = na, typename U2 = na, typename U3 = na
154 , typename U4 = na, typename U5 = na
159 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
160 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
161 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
164 typedef typename apply_wrap2<
166 , typename t1::type, typename t2::type
175 typename F, typename T1, typename T2, typename U1, typename U2
176 , typename U3, typename U4, typename U5
178 struct resolve_bind_arg<
179 bind2< F,T1,T2 >, U1, U2, U3, U4, U5
182 typedef bind2< F,T1,T2 > f_;
183 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
188 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
189 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
192 typename F, typename T1, typename T2
194 struct bind< F,T1,T2,na,na,na >
200 typename F, typename T1, typename T2, typename T3
205 typename U1 = na, typename U2 = na, typename U3 = na
206 , typename U4 = na, typename U5 = na
211 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
212 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
213 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
214 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
217 typedef typename apply_wrap3<
219 , typename t1::type, typename t2::type, typename t3::type
228 typename F, typename T1, typename T2, typename T3, typename U1
229 , typename U2, typename U3, typename U4, typename U5
231 struct resolve_bind_arg<
232 bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5
235 typedef bind3< F,T1,T2,T3 > f_;
236 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
241 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
242 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
245 typename F, typename T1, typename T2, typename T3
247 struct bind< F,T1,T2,T3,na,na >
248 : bind3< F,T1,T2,T3 >
253 typename F, typename T1, typename T2, typename T3, typename T4
258 typename U1 = na, typename U2 = na, typename U3 = na
259 , typename U4 = na, typename U5 = na
264 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
265 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
266 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
267 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
268 typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
271 typedef typename apply_wrap4<
273 , typename t1::type, typename t2::type, typename t3::type
283 typename F, typename T1, typename T2, typename T3, typename T4
284 , typename U1, typename U2, typename U3, typename U4, typename U5
286 struct resolve_bind_arg<
287 bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
290 typedef bind4< F,T1,T2,T3,T4 > f_;
291 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
296 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
297 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
300 typename F, typename T1, typename T2, typename T3, typename T4
302 struct bind< F,T1,T2,T3,T4,na >
303 : bind4< F,T1,T2,T3,T4 >
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 typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
321 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
322 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
323 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
324 typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;
325 typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;
328 typedef typename apply_wrap5<
330 , typename t1::type, typename t2::type, typename t3::type
331 , typename t4::type, typename t5::type
340 typename F, typename T1, typename T2, typename T3, typename T4
341 , typename T5, typename U1, typename U2, typename U3, typename U4
344 struct resolve_bind_arg<
345 bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
348 typedef bind5< F,T1,T2,T3,T4,T5 > f_;
349 typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
354 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
355 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
357 /// primary template (not a specialization!)
360 typename F, typename T1, typename T2, typename T3, typename T4
364 : bind5< F,T1,T2,T3,T4,T5 >
368 /// if_/eval_if specializations
369 template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
372 template< typename T1, typename T2, typename T3 > struct if_;
375 typename Tag, typename T1, typename T2, typename T3
383 typename U1 = na, typename U2 = na, typename U3 = na
384 , typename U4 = na, typename U5 = na
389 typedef mpl::arg<1> n1;
390 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
391 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
392 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
393 typedef typename if_<
399 typedef typename f_::type type;
404 template< typename T1, typename T2, typename T3 > class F, typename Tag
408 template< typename T1, typename T2, typename T3 > struct eval_if;
411 typename Tag, typename T1, typename T2, typename T3
414 quote3< eval_if,Tag >
419 typename U1 = na, typename U2 = na, typename U3 = na
420 , typename U4 = na, typename U5 = na
425 typedef mpl::arg<1> n1;
426 typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;
427 typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;
428 typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;
429 typedef typename eval_if<
435 typedef typename f_::type type;