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 {
17 struct resolve_arg_impl
20 typename T, typename U1, typename U2, typename U3
21 , typename U4, typename U5
30 struct resolve_arg_impl<true>
33 typename T, typename U1, typename U2, typename U3
34 , typename U4, typename U5
38 typedef typename apply_wrap5<
45 template< typename T > struct is_bind_template;
48 typename T, typename U1, typename U2, typename U3, typename U4
51 struct resolve_bind_arg
52 : resolve_arg_impl< is_bind_template<T>::value >
53 ::template result_< T,U1,U2,U3,U4,U5 >
57 template< int arity_ > struct bind_chooser;
59 aux::no_tag is_bind_helper(...);
60 template< typename T > aux::no_tag is_bind_helper(protect<T>*);
63 typename F, typename T1, typename T2, typename T3, typename T4
66 aux::yes_tag is_bind_helper(bind< F,T1,T2,T3,T4,T5 >*);
69 aux::yes_tag is_bind_helper(arg<N>*);
71 template< bool is_ref_ = true >
72 struct is_bind_template_impl
74 template< typename T > struct result_
76 BOOST_STATIC_CONSTANT(bool, value = false);
81 struct is_bind_template_impl<false>
83 template< typename T > struct result_
85 BOOST_STATIC_CONSTANT(bool, value =
86 sizeof(aux::is_bind_helper(static_cast<T*>(0)))
87 == sizeof(aux::yes_tag)
92 template< typename T > struct is_bind_template
93 : is_bind_template_impl< ::boost::detail::is_reference_impl<T>::value >
106 typename U1 = na, typename U2 = na, typename U3 = na
107 , typename U4 = na, typename U5 = na
112 typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;
115 typedef typename apply_wrap0<
128 is_bind_helper(bind0<F>*);
132 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
133 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
138 struct bind_chooser<0>
141 typename F, typename T1, typename T2, typename T3, typename T4
146 typedef bind0<F> type;
153 typename F, typename T1
158 typename U1 = na, typename U2 = na, typename U3 = na
159 , typename U4 = na, typename U5 = na
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;
168 typedef typename apply_wrap1<
179 typename F, typename T1
182 is_bind_helper(bind1< F,T1 >*);
186 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
187 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
192 struct bind_chooser<1>
195 typename F, typename T1, typename T2, typename T3, typename T4
200 typedef bind1< F,T1 > type;
207 typename F, typename T1, typename T2
212 typename U1 = na, typename U2 = na, typename U3 = na
213 , typename U4 = na, typename U5 = na
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;
223 typedef typename apply_wrap2<
225 , typename t1::type, typename t2::type
234 typename F, typename T1, typename T2
237 is_bind_helper(bind2< F,T1,T2 >*);
241 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
242 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
247 struct bind_chooser<2>
250 typename F, typename T1, typename T2, typename T3, typename T4
255 typedef bind2< F,T1,T2 > type;
262 typename F, typename T1, typename T2, typename T3
267 typename U1 = na, typename U2 = na, typename U3 = na
268 , typename U4 = na, typename U5 = na
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;
279 typedef typename apply_wrap3<
281 , typename t1::type, typename t2::type, typename t3::type
290 typename F, typename T1, typename T2, typename T3
293 is_bind_helper(bind3< F,T1,T2,T3 >*);
297 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
298 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
303 struct bind_chooser<3>
306 typename F, typename T1, typename T2, typename T3, typename T4
311 typedef bind3< F,T1,T2,T3 > type;
318 typename F, typename T1, typename T2, typename T3, typename T4
323 typename U1 = na, typename U2 = na, typename U3 = na
324 , typename U4 = na, typename U5 = na
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;
336 typedef typename apply_wrap4<
338 , typename t1::type, typename t2::type, typename t3::type
348 typename F, typename T1, typename T2, typename T3, typename T4
351 is_bind_helper(bind4< F,T1,T2,T3,T4 >*);
355 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
356 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
361 struct bind_chooser<4>
364 typename F, typename T1, typename T2, typename T3, typename T4
369 typedef bind4< F,T1,T2,T3,T4 > type;
376 typename F, typename T1, typename T2, typename T3, typename T4
382 typename U1 = na, typename U2 = na, typename U3 = na
383 , typename U4 = na, typename U5 = na
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;
396 typedef typename apply_wrap5<
398 , typename t1::type, typename t2::type, typename t3::type
399 , typename t4::type, typename t5::type
408 typename F, typename T1, typename T2, typename T3, typename T4
412 is_bind_helper(bind5< F,T1,T2,T3,T4,T5 >*);
416 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
417 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
422 struct bind_chooser<5>
425 typename F, typename T1, typename T2, typename T3, typename T4
430 typedef bind5< F,T1,T2,T3,T4,T5 > type;
438 template< typename T >
441 BOOST_STATIC_CONSTANT(bool, value = true);
445 struct is_bind_arg<na>
447 BOOST_STATIC_CONSTANT(bool, value = false);
451 typename T1, typename T2, typename T3, typename T4, typename T5
453 struct bind_count_args
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
466 typename F, typename T1, typename T2, typename T3, typename T4
471 aux::bind_count_args< T1,T2,T3,T4,T5 >::value
472 >::template result_< F,T1,T2,T3,T4,T5 >::type
476 BOOST_MPL_AUX_ARITY_SPEC(
481 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(