williamr@4: williamr@4: // Copyright Peter Dimov 2001 williamr@4: // Copyright Aleksey Gurtovoy 2001-2004 williamr@4: // williamr@4: // Distributed under the Boost Software License, Version 1.0. williamr@4: // (See accompanying file LICENSE_1_0.txt or copy at williamr@4: // http://www.boost.org/LICENSE_1_0.txt) williamr@4: // williamr@4: williamr@4: // Preprocessed version of "boost/mpl/bind.hpp" header williamr@4: // -- DO NOT modify by hand! williamr@4: williamr@4: namespace boost { namespace mpl { williamr@4: williamr@4: namespace aux { williamr@4: williamr@4: template< williamr@4: typename T, typename U1, typename U2, typename U3, typename U4 williamr@4: , typename U5 williamr@4: > williamr@4: struct resolve_bind_arg williamr@4: { williamr@4: typedef T type; williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename T williamr@4: , typename Arg williamr@4: > williamr@4: struct replace_unnamed_arg williamr@4: { williamr@4: typedef Arg next; williamr@4: typedef T type; williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename Arg williamr@4: > williamr@4: struct replace_unnamed_arg< arg< -1 >, Arg > williamr@4: { williamr@4: typedef typename Arg::next next; williamr@4: typedef Arg type; williamr@4: }; williamr@4: williamr@4: template< williamr@4: int N, typename U1, typename U2, typename U3, typename U4, typename U5 williamr@4: > williamr@4: struct resolve_bind_arg< arg, U1, U2, U3, U4, U5 > williamr@4: { williamr@4: typedef typename apply_wrap5, U1, U2, U3, U4, U5>::type type; williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3, typename T4 williamr@4: , typename T5, typename U1, typename U2, typename U3, typename U4 williamr@4: , typename U5 williamr@4: > williamr@4: struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 > williamr@4: { williamr@4: typedef bind< F,T1,T2,T3,T4,T5 > f_; williamr@4: typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; williamr@4: }; williamr@4: williamr@4: } // namespace aux williamr@4: williamr@4: template< williamr@4: typename F williamr@4: > williamr@4: struct bind0 williamr@4: { williamr@4: template< williamr@4: typename U1 = na, typename U2 = na, typename U3 = na williamr@4: , typename U4 = na, typename U5 = na williamr@4: > williamr@4: struct apply williamr@4: { williamr@4: private: williamr@4: typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; williamr@4: typedef typename r0::type a0; williamr@4: typedef typename r0::next n1; williamr@4: typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; williamr@4: /// williamr@4: public: williamr@4: typedef typename apply_wrap0< williamr@4: f_ williamr@4: >::type type; williamr@4: williamr@4: }; williamr@4: }; williamr@4: williamr@4: namespace aux { williamr@4: williamr@4: template< williamr@4: typename F, typename U1, typename U2, typename U3, typename U4 williamr@4: , typename U5 williamr@4: > williamr@4: struct resolve_bind_arg< williamr@4: bind0, U1, U2, U3, U4, U5 williamr@4: > williamr@4: { williamr@4: typedef bind0 f_; williamr@4: typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; williamr@4: }; williamr@4: williamr@4: } // namespace aux williamr@4: williamr@4: BOOST_MPL_AUX_ARITY_SPEC(1, bind0) williamr@4: BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0) williamr@4: williamr@4: template< williamr@4: typename F williamr@4: > williamr@4: struct bind< F,na,na,na,na,na > williamr@4: : bind0 williamr@4: { williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename F, typename T1 williamr@4: > williamr@4: struct bind1 williamr@4: { williamr@4: template< williamr@4: typename U1 = na, typename U2 = na, typename U3 = na williamr@4: , typename U4 = na, typename U5 = na williamr@4: > williamr@4: struct apply williamr@4: { williamr@4: private: williamr@4: typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; williamr@4: typedef typename r0::type a0; williamr@4: typedef typename r0::next n1; williamr@4: typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T1,n1 > r1; williamr@4: typedef typename r1::type a1; williamr@4: typedef typename r1::next n2; williamr@4: typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; williamr@4: /// williamr@4: public: williamr@4: typedef typename apply_wrap1< williamr@4: f_ williamr@4: , typename t1::type williamr@4: >::type type; williamr@4: williamr@4: }; williamr@4: }; williamr@4: williamr@4: namespace aux { williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename U1, typename U2, typename U3 williamr@4: , typename U4, typename U5 williamr@4: > williamr@4: struct resolve_bind_arg< williamr@4: bind1< F,T1 >, U1, U2, U3, U4, U5 williamr@4: > williamr@4: { williamr@4: typedef bind1< F,T1 > f_; williamr@4: typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; williamr@4: }; williamr@4: williamr@4: } // namespace aux williamr@4: williamr@4: BOOST_MPL_AUX_ARITY_SPEC(2, bind1) williamr@4: BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1) williamr@4: williamr@4: template< williamr@4: typename F, typename T1 williamr@4: > williamr@4: struct bind< F,T1,na,na,na,na > williamr@4: : bind1< F,T1 > williamr@4: { williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2 williamr@4: > williamr@4: struct bind2 williamr@4: { williamr@4: template< williamr@4: typename U1 = na, typename U2 = na, typename U3 = na williamr@4: , typename U4 = na, typename U5 = na williamr@4: > williamr@4: struct apply williamr@4: { williamr@4: private: williamr@4: typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; williamr@4: typedef typename r0::type a0; williamr@4: typedef typename r0::next n1; williamr@4: typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T1,n1 > r1; williamr@4: typedef typename r1::type a1; williamr@4: typedef typename r1::next n2; williamr@4: typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T2,n2 > r2; williamr@4: typedef typename r2::type a2; williamr@4: typedef typename r2::next n3; williamr@4: typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; williamr@4: /// williamr@4: public: williamr@4: typedef typename apply_wrap2< williamr@4: f_ williamr@4: , typename t1::type, typename t2::type williamr@4: >::type type; williamr@4: williamr@4: }; williamr@4: }; williamr@4: williamr@4: namespace aux { williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename U1, typename U2 williamr@4: , typename U3, typename U4, typename U5 williamr@4: > williamr@4: struct resolve_bind_arg< williamr@4: bind2< F,T1,T2 >, U1, U2, U3, U4, U5 williamr@4: > williamr@4: { williamr@4: typedef bind2< F,T1,T2 > f_; williamr@4: typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; williamr@4: }; williamr@4: williamr@4: } // namespace aux williamr@4: williamr@4: BOOST_MPL_AUX_ARITY_SPEC(3, bind2) williamr@4: BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2) williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2 williamr@4: > williamr@4: struct bind< F,T1,T2,na,na,na > williamr@4: : bind2< F,T1,T2 > williamr@4: { williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3 williamr@4: > williamr@4: struct bind3 williamr@4: { williamr@4: template< williamr@4: typename U1 = na, typename U2 = na, typename U3 = na williamr@4: , typename U4 = na, typename U5 = na williamr@4: > williamr@4: struct apply williamr@4: { williamr@4: private: williamr@4: typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; williamr@4: typedef typename r0::type a0; williamr@4: typedef typename r0::next n1; williamr@4: typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T1,n1 > r1; williamr@4: typedef typename r1::type a1; williamr@4: typedef typename r1::next n2; williamr@4: typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T2,n2 > r2; williamr@4: typedef typename r2::type a2; williamr@4: typedef typename r2::next n3; williamr@4: typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T3,n3 > r3; williamr@4: typedef typename r3::type a3; williamr@4: typedef typename r3::next n4; williamr@4: typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; williamr@4: /// williamr@4: public: williamr@4: typedef typename apply_wrap3< williamr@4: f_ williamr@4: , typename t1::type, typename t2::type, typename t3::type williamr@4: >::type type; williamr@4: williamr@4: }; williamr@4: }; williamr@4: williamr@4: namespace aux { williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3, typename U1 williamr@4: , typename U2, typename U3, typename U4, typename U5 williamr@4: > williamr@4: struct resolve_bind_arg< williamr@4: bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5 williamr@4: > williamr@4: { williamr@4: typedef bind3< F,T1,T2,T3 > f_; williamr@4: typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; williamr@4: }; williamr@4: williamr@4: } // namespace aux williamr@4: williamr@4: BOOST_MPL_AUX_ARITY_SPEC(4, bind3) williamr@4: BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3) williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3 williamr@4: > williamr@4: struct bind< F,T1,T2,T3,na,na > williamr@4: : bind3< F,T1,T2,T3 > williamr@4: { williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3, typename T4 williamr@4: > williamr@4: struct bind4 williamr@4: { williamr@4: template< williamr@4: typename U1 = na, typename U2 = na, typename U3 = na williamr@4: , typename U4 = na, typename U5 = na williamr@4: > williamr@4: struct apply williamr@4: { williamr@4: private: williamr@4: typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; williamr@4: typedef typename r0::type a0; williamr@4: typedef typename r0::next n1; williamr@4: typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T1,n1 > r1; williamr@4: typedef typename r1::type a1; williamr@4: typedef typename r1::next n2; williamr@4: typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T2,n2 > r2; williamr@4: typedef typename r2::type a2; williamr@4: typedef typename r2::next n3; williamr@4: typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T3,n3 > r3; williamr@4: typedef typename r3::type a3; williamr@4: typedef typename r3::next n4; williamr@4: typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T4,n4 > r4; williamr@4: typedef typename r4::type a4; williamr@4: typedef typename r4::next n5; williamr@4: typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; williamr@4: /// williamr@4: public: williamr@4: typedef typename apply_wrap4< williamr@4: f_ williamr@4: , typename t1::type, typename t2::type, typename t3::type williamr@4: , typename t4::type williamr@4: >::type type; williamr@4: williamr@4: }; williamr@4: }; williamr@4: williamr@4: namespace aux { williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3, typename T4 williamr@4: , typename U1, typename U2, typename U3, typename U4, typename U5 williamr@4: > williamr@4: struct resolve_bind_arg< williamr@4: bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5 williamr@4: > williamr@4: { williamr@4: typedef bind4< F,T1,T2,T3,T4 > f_; williamr@4: typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; williamr@4: }; williamr@4: williamr@4: } // namespace aux williamr@4: williamr@4: BOOST_MPL_AUX_ARITY_SPEC(5, bind4) williamr@4: BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4) williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3, typename T4 williamr@4: > williamr@4: struct bind< F,T1,T2,T3,T4,na > williamr@4: : bind4< F,T1,T2,T3,T4 > williamr@4: { williamr@4: }; williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3, typename T4 williamr@4: , typename T5 williamr@4: > williamr@4: struct bind5 williamr@4: { williamr@4: template< williamr@4: typename U1 = na, typename U2 = na, typename U3 = na williamr@4: , typename U4 = na, typename U5 = na williamr@4: > williamr@4: struct apply williamr@4: { williamr@4: private: williamr@4: typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0; williamr@4: typedef typename r0::type a0; williamr@4: typedef typename r0::next n1; williamr@4: typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T1,n1 > r1; williamr@4: typedef typename r1::type a1; williamr@4: typedef typename r1::next n2; williamr@4: typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T2,n2 > r2; williamr@4: typedef typename r2::type a2; williamr@4: typedef typename r2::next n3; williamr@4: typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T3,n3 > r3; williamr@4: typedef typename r3::type a3; williamr@4: typedef typename r3::next n4; williamr@4: typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T4,n4 > r4; williamr@4: typedef typename r4::type a4; williamr@4: typedef typename r4::next n5; williamr@4: typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T5,n5 > r5; williamr@4: typedef typename r5::type a5; williamr@4: typedef typename r5::next n6; williamr@4: typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5; williamr@4: /// williamr@4: public: williamr@4: typedef typename apply_wrap5< williamr@4: f_ williamr@4: , typename t1::type, typename t2::type, typename t3::type williamr@4: , typename t4::type, typename t5::type williamr@4: >::type type; williamr@4: williamr@4: }; williamr@4: }; williamr@4: williamr@4: namespace aux { williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3, typename T4 williamr@4: , typename T5, typename U1, typename U2, typename U3, typename U4 williamr@4: , typename U5 williamr@4: > williamr@4: struct resolve_bind_arg< williamr@4: bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 williamr@4: > williamr@4: { williamr@4: typedef bind5< F,T1,T2,T3,T4,T5 > f_; williamr@4: typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type; williamr@4: }; williamr@4: williamr@4: } // namespace aux williamr@4: williamr@4: BOOST_MPL_AUX_ARITY_SPEC(6, bind5) williamr@4: BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5) williamr@4: williamr@4: /// primary template (not a specialization!) williamr@4: williamr@4: template< williamr@4: typename F, typename T1, typename T2, typename T3, typename T4 williamr@4: , typename T5 williamr@4: > williamr@4: struct bind williamr@4: : bind5< F,T1,T2,T3,T4,T5 > williamr@4: { williamr@4: }; williamr@4: williamr@4: /// if_/eval_if specializations williamr@4: template< template< typename T1, typename T2, typename T3 > class F, typename Tag > williamr@4: struct quote3; williamr@4: williamr@4: template< typename T1, typename T2, typename T3 > struct if_; williamr@4: williamr@4: template< williamr@4: typename Tag, typename T1, typename T2, typename T3 williamr@4: > williamr@4: struct bind3< williamr@4: quote3< if_,Tag > williamr@4: , T1, T2, T3 williamr@4: > williamr@4: { williamr@4: template< williamr@4: typename U1 = na, typename U2 = na, typename U3 = na williamr@4: , typename U4 = na, typename U5 = na williamr@4: > williamr@4: struct apply williamr@4: { williamr@4: private: williamr@4: typedef mpl::arg<1> n1; williamr@4: typedef aux::replace_unnamed_arg< T1,n1 > r1; williamr@4: typedef typename r1::type a1; williamr@4: typedef typename r1::next n2; williamr@4: typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T2,n2 > r2; williamr@4: typedef typename r2::type a2; williamr@4: typedef typename r2::next n3; williamr@4: typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T3,n3 > r3; williamr@4: typedef typename r3::type a3; williamr@4: typedef typename r3::next n4; williamr@4: typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; williamr@4: /// williamr@4: typedef typename if_< williamr@4: typename t1::type williamr@4: , t2, t3 williamr@4: >::type f_; williamr@4: williamr@4: public: williamr@4: typedef typename f_::type type; williamr@4: }; williamr@4: }; williamr@4: williamr@4: template< williamr@4: template< typename T1, typename T2, typename T3 > class F, typename Tag williamr@4: > williamr@4: struct quote3; williamr@4: williamr@4: template< typename T1, typename T2, typename T3 > struct eval_if; williamr@4: williamr@4: template< williamr@4: typename Tag, typename T1, typename T2, typename T3 williamr@4: > williamr@4: struct bind3< williamr@4: quote3< eval_if,Tag > williamr@4: , T1, T2, T3 williamr@4: > williamr@4: { williamr@4: template< williamr@4: typename U1 = na, typename U2 = na, typename U3 = na williamr@4: , typename U4 = na, typename U5 = na williamr@4: > williamr@4: struct apply williamr@4: { williamr@4: private: williamr@4: typedef mpl::arg<1> n1; williamr@4: typedef aux::replace_unnamed_arg< T1,n1 > r1; williamr@4: typedef typename r1::type a1; williamr@4: typedef typename r1::next n2; williamr@4: typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T2,n2 > r2; williamr@4: typedef typename r2::type a2; williamr@4: typedef typename r2::next n3; williamr@4: typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2; williamr@4: /// williamr@4: typedef aux::replace_unnamed_arg< T3,n3 > r3; williamr@4: typedef typename r3::type a3; williamr@4: typedef typename r3::next n4; williamr@4: typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3; williamr@4: /// williamr@4: typedef typename eval_if< williamr@4: typename t1::type williamr@4: , t2, t3 williamr@4: >::type f_; williamr@4: williamr@4: public: williamr@4: typedef typename f_::type type; williamr@4: }; williamr@4: }; williamr@4: williamr@4: }} williamr@4: