

// Copyright Aleksey Gurtovoy 2002-2004

//

// Distributed under the Boost Software License, Version 1.0. 

// (See accompanying file LICENSE_1_0.txt or copy at 

// http://www.boost.org/LICENSE_1_0.txt)

//



// Preprocessed version of "boost/mpl/unpack_args.hpp" header

// -- DO NOT modify by hand!



namespace boost { namespace mpl {



namespace aux {



template< BOOST_MPL_AUX_NTTP_DECL(int, size) > struct unpack_args_impl

{

    template< typename F, typename Args > struct apply;

};



template<> struct unpack_args_impl<0>

{

    template< typename F, typename Args > struct apply

        : apply0<

              F

            >

    {

    };

};



template<> struct unpack_args_impl<1>

{

    template< typename F, typename Args > struct apply

        : apply1<

              F

            , typename at_c< Args,0 >::type

            >

    {

    };

};



template<> struct unpack_args_impl<2>

{

    template< typename F, typename Args > struct apply

        : apply2<

              F

            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type

            >

    {

    };

};



template<> struct unpack_args_impl<3>

{

    template< typename F, typename Args > struct apply

        : apply3<

              F

            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type

            , typename at_c< Args,2 >::type

            >

    {

    };

};



template<> struct unpack_args_impl<4>

{

    template< typename F, typename Args > struct apply

        : apply4<

              F

            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type

            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type

            >

    {

    };

};



template<> struct unpack_args_impl<5>

{

    template< typename F, typename Args > struct apply

        : apply5<

              F

            , typename at_c< Args,0 >::type, typename at_c< Args,1 >::type

            , typename at_c< Args,2 >::type, typename at_c< Args,3 >::type

            , typename at_c< Args,4 >::type

            >

    {

    };

};



}



template<

      typename F

    >

struct unpack_args

{

    template< typename Args > struct apply



        : aux::unpack_args_impl< size<Args>::value >

            ::template apply< F,Args >



    {

    };

};



BOOST_MPL_AUX_PASS_THROUGH_LAMBDA_SPEC(1, unpack_args)



}}



