/*=============================================================================
    Copyright (c) 2001-2011 Joel de Guzman

    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)

    This is an auto-generated file. Do not edit!
==============================================================================*/
namespace boost {
namespace fusion {
namespace detail {
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 vector_n_chooser
{
    typedef vector20<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18, T19> type;
};
template <>
struct vector_n_chooser<void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector0<> type;
};
template <typename T0>
struct vector_n_chooser<
    T0
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector1<T0> type;
};
template <typename T0, typename T1>
struct vector_n_chooser<
    T0, T1
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector2<T0, T1> type;
};
template <typename T0, typename T1, typename T2>
struct vector_n_chooser<
    T0, T1, T2
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector3<T0, T1, T2> type;
};
template <typename T0, typename T1, typename T2, typename T3>
struct vector_n_chooser<
    T0, T1, T2, T3
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector4<T0, T1, T2, T3> type;
};
template <typename T0, typename T1, typename T2, typename T3, typename T4>
struct vector_n_chooser<
    T0, T1, T2, T3, T4
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector5<T0, T1, T2, T3, T4> type;
};
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector6<T0, T1, T2, T3, T4, T5> type;
};
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector7<T0, T1, T2, T3, T4, T5, T6> type;
};
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector8<T0, T1, T2, T3, T4, T5, T6, T7> type;
};
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector9<T0, T1, T2, T3, T4, T5, T6, T7, T8> type;
};
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9
    , void_, void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector10<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
};
template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9, typename T10>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
    , void_, void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector11<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> type;
};
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>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11
    , void_, void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector12<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> type;
};
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>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12
    , void_, void_, void_, void_, void_, void_, void_>
{
    typedef vector13<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> type;
};
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>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13
    , void_, void_, void_, void_, void_, void_>
{
    typedef vector14<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> type;
};
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>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14
    , void_, void_, void_, void_, void_>
{
    typedef vector15<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> type;
};
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>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15
    , void_, void_, void_, void_>
{
    typedef vector16<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> type;
};
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>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16
    , void_, void_, void_>
{
    typedef vector17<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> type;
};
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>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17
    , void_, void_>
{
    typedef vector18<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17> type;
};
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>
struct vector_n_chooser<
    T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18
    , void_>
{
    typedef vector19<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, T17, T18> type;
};
}
}
}
