

// 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/set.hpp" header

// -- DO NOT modify by hand!



namespace boost { namespace mpl {



namespace aux {

template< int N >

struct set_chooser;



}



namespace aux {



template<>

struct set_chooser<0>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef set0<

             

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<1>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set1<

              T0

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<2>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set2<

              T0, T1

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<3>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set3<

              T0, T1, T2

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<4>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set4<

              T0, T1, T2, T3

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<5>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set5<

              T0, T1, T2, T3, T4

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<6>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set6<

              T0, T1, T2, T3, T4, T5

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<7>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set7<

              T0, T1, T2, T3, T4, T5, T6

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<8>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set8<

              T0, T1, T2, T3, T4, T5, T6, T7

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<9>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set9<

              T0, T1, T2, T3, T4, T5, T6, T7, T8

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<10>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set10<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<11>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set11<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<12>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set12<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<13>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set13<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<14>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set14<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<15>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set15<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<16>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set16<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<17>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set17<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<18>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set18<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<19>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set19<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18

            >::type type;



    };

};



} // namespace aux



namespace aux {



template<>

struct set_chooser<20>

{

    template<

          typename T0, typename T1, typename T2, typename T3, typename T4

        , typename T5, typename T6, typename T7, typename T8, typename T9

        , typename T10, typename T11, typename T12, typename T13, typename T14

        , typename T15, typename T16, typename T17, typename T18, typename T19

        >

    struct result_

    {

        typedef typename set20<

              T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19

            >::type type;



    };

};



} // namespace aux



namespace aux {



template< typename T >

struct is_set_arg

{

    BOOST_STATIC_CONSTANT(bool, value  = true);

};



template<>

struct is_set_arg<na>

{

    BOOST_STATIC_CONSTANT(bool, value  = false);

};



template<

      typename T1, typename T2, typename T3, typename T4, typename T5

    , typename T6, typename T7, typename T8, typename T9, typename T10

    , typename T11, typename T12, typename T13, typename T14, typename T15

    , typename T16, typename T17, typename T18, typename T19, typename T20

    >

struct set_count_args

{

    BOOST_STATIC_CONSTANT(int, value =

          is_set_arg<T1>::value + is_set_arg<T2>::value 

        + is_set_arg<T3>::value + is_set_arg<T4>::value 

        + is_set_arg<T5>::value + is_set_arg<T6>::value 

        + is_set_arg<T7>::value + is_set_arg<T8>::value 

        + is_set_arg<T9>::value + is_set_arg<T10>::value 

        + is_set_arg<T11>::value + is_set_arg<T12>::value 

        + is_set_arg<T13>::value + is_set_arg<T14>::value 

        + is_set_arg<T15>::value + is_set_arg<T16>::value 

        + is_set_arg<T17>::value + is_set_arg<T18>::value 

        + is_set_arg<T19>::value + is_set_arg<T20>::value

        );



};



template<

      typename T0, typename T1, typename T2, typename T3, typename T4

    , typename T5, typename T6, typename T7, typename T8, typename T9

    , typename T10, typename T11, typename T12, typename T13, typename T14

    , typename T15, typename T16, typename T17, typename T18, typename T19

    >

struct set_impl

{

    typedef aux::set_count_args<

          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19

        > arg_num_;



    typedef typename aux::set_chooser< arg_num_::value >

        ::template result_< T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,T17,T18,T19 >::type type;

};



} // namespace aux



template<

      typename T0 = na, typename T1 = na, typename T2 = na, typename T3 = na

    , typename T4 = na, typename T5 = na, typename T6 = na, typename T7 = na

    , typename T8 = na, typename T9 = na, typename T10 = na, typename T11 = na

    , typename T12 = na, typename T13 = na, typename T14 = na

    , typename T15 = na, typename T16 = na, typename T17 = na

    , typename T18 = na, typename T19 = na

    >

struct set

    : aux::set_impl<

          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19

        >::type

{

    typedef typename aux::set_impl<

          T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19

        >::type type;

};



}}



