

// Copyright Aleksey Gurtovoy 2000-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/apply_wrap.hpp" header

// -- DO NOT modify by hand!



namespace boost { namespace mpl {



template<

      int N, typename F

    >

struct apply_wrap_impl0;



template<

      typename F

    >

struct apply_wrap_impl0<

          0

        , F

       

        >

{

    typedef typename F::template apply<

         

/// since the defaults are "lost", we have to pass *something* even for nullary

/// metafunction classes

        na

        > type;

};



template<

      typename F

    >

struct apply_wrap_impl0<

          1

        , F

       

        >

{

    typedef typename F::template apply<

         

        na

        > type;

};



template<

      typename F

    >

struct apply_wrap_impl0<

          2

        , F

       

        >

{

    typedef typename F::template apply<

         

        na, na



        > type;

};



template<

      typename F

    >

struct apply_wrap_impl0<

          3

        , F

       

        >

{

    typedef typename F::template apply<

         

        na, na, na



        > type;

};



template<

      typename F

    >

struct apply_wrap_impl0<

          4

        , F

       

        >

{

    typedef typename F::template apply<

         

        na, na, na, na



        > type;

};



template<

      typename F

    >

struct apply_wrap_impl0<

          5

        , F

       

        >

{

    typedef typename F::template apply<

         

        na, na, na, na, na



        > type;

};



template<

      typename F

    >

struct apply_wrap0

    : apply_wrap_impl0<

          ::boost::mpl::aux::arity< F,0 >::value

        , F

       

        >::type

{

};



template<

      int N, typename F, typename T1

    >

struct apply_wrap_impl1;



template<

      typename F, typename T1

    >

struct apply_wrap_impl1<

          1

        , F

        , T1

        >

{

    typedef typename F::template apply<

          T1

        > type;

};



template<

      typename F, typename T1

    >

struct apply_wrap_impl1<

          2

        , F

        , T1

        >

{

    typedef typename F::template apply<

          T1

        , na



        > type;

};



template<

      typename F, typename T1

    >

struct apply_wrap_impl1<

          3

        , F

        , T1

        >

{

    typedef typename F::template apply<

          T1

        , na, na



        > type;

};



template<

      typename F, typename T1

    >

struct apply_wrap_impl1<

          4

        , F

        , T1

        >

{

    typedef typename F::template apply<

          T1

        , na, na, na



        > type;

};



template<

      typename F, typename T1

    >

struct apply_wrap_impl1<

          5

        , F

        , T1

        >

{

    typedef typename F::template apply<

          T1

        , na, na, na, na



        > type;

};



template<

      typename F, typename T1

    >

struct apply_wrap1

    : apply_wrap_impl1<

          ::boost::mpl::aux::arity< F,1 >::value

        , F

        , T1

        >::type

{

};



template<

      int N, typename F, typename T1, typename T2

    >

struct apply_wrap_impl2;



template<

      typename F, typename T1, typename T2

    >

struct apply_wrap_impl2<

          2

        , F

        , T1, T2

        >

{

    typedef typename F::template apply<

          T1, T2



        > type;

};



template<

      typename F, typename T1, typename T2

    >

struct apply_wrap_impl2<

          3

        , F

        , T1, T2

        >

{

    typedef typename F::template apply<

          T1, T2



        , na



        > type;

};



template<

      typename F, typename T1, typename T2

    >

struct apply_wrap_impl2<

          4

        , F

        , T1, T2

        >

{

    typedef typename F::template apply<

          T1, T2



        , na, na



        > type;

};



template<

      typename F, typename T1, typename T2

    >

struct apply_wrap_impl2<

          5

        , F

        , T1, T2

        >

{

    typedef typename F::template apply<

          T1, T2



        , na, na, na



        > type;

};



template<

      typename F, typename T1, typename T2

    >

struct apply_wrap2

    : apply_wrap_impl2<

          ::boost::mpl::aux::arity< F,2 >::value

        , F

        , T1, T2

        >::type

{

};



template<

      int N, typename F, typename T1, typename T2, typename T3

    >

struct apply_wrap_impl3;



template<

      typename F, typename T1, typename T2, typename T3

    >

struct apply_wrap_impl3<

          3

        , F

        , T1, T2, T3

        >

{

    typedef typename F::template apply<

          T1, T2, T3



        > type;

};



template<

      typename F, typename T1, typename T2, typename T3

    >

struct apply_wrap_impl3<

          4

        , F

        , T1, T2, T3

        >

{

    typedef typename F::template apply<

          T1, T2, T3



        , na



        > type;

};



template<

      typename F, typename T1, typename T2, typename T3

    >

struct apply_wrap_impl3<

          5

        , F

        , T1, T2, T3

        >

{

    typedef typename F::template apply<

          T1, T2, T3



        , na, na



        > type;

};



template<

      typename F, typename T1, typename T2, typename T3

    >

struct apply_wrap3

    : apply_wrap_impl3<

          ::boost::mpl::aux::arity< F,3 >::value

        , F

        , T1, T2, T3

        >::type

{

};



template<

      int N, typename F, typename T1, typename T2, typename T3, typename T4

    >

struct apply_wrap_impl4;



template<

      typename F, typename T1, typename T2, typename T3, typename T4

    >

struct apply_wrap_impl4<

          4

        , F

        , T1, T2, T3, T4

        >

{

    typedef typename F::template apply<

          T1, T2, T3, T4



        > type;

};



template<

      typename F, typename T1, typename T2, typename T3, typename T4

    >

struct apply_wrap_impl4<

          5

        , F

        , T1, T2, T3, T4

        >

{

    typedef typename F::template apply<

          T1, T2, T3, T4



        , na



        > type;

};



template<

      typename F, typename T1, typename T2, typename T3, typename T4

    >

struct apply_wrap4

    : apply_wrap_impl4<

          ::boost::mpl::aux::arity< F,4 >::value

        , F

        , T1, T2, T3, T4

        >::type

{

};



template<

      int N, typename F, typename T1, typename T2, typename T3, typename T4

    , typename T5

    >

struct apply_wrap_impl5;



template<

      typename F, typename T1, typename T2, typename T3, typename T4

    , typename T5

    >

struct apply_wrap_impl5<

          5

        , F

        , T1, T2, T3, T4, T5

        >

{

    typedef typename F::template apply<

          T1, T2, T3, T4, T5



        > type;

};



template<

      typename F, typename T1, typename T2, typename T3, typename T4

    , typename T5

    >

struct apply_wrap5

    : apply_wrap_impl5<

          ::boost::mpl::aux::arity< F,5 >::value

        , F

        , T1, T2, T3, T4, T5

        >::type

{

};



}}



