/*=============================================================================
    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 {
BOOST_FUSION_BARRIER_BEGIN
template <>
struct as_deque<1>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef deque<T0> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;

        return result(*i0);
    }
};
template <>
struct as_deque<2>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::next<I1>::type I2;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef typename fusion::result_of::value_of<I1>::type T1;
        typedef deque<T0, T1> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;
        typename gen::I1 i1 = fusion::next(i0);
        return result(*i0, *i1);
    }
};
template <>
struct as_deque<3>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::next<I1>::type I2;
        typedef typename fusion::result_of::next<I2>::type I3;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef typename fusion::result_of::value_of<I1>::type T1;
        typedef typename fusion::result_of::value_of<I2>::type T2;
        typedef deque<T0, T1, T2> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;
        typename gen::I1 i1 = fusion::next(i0);
        typename gen::I2 i2 = fusion::next(i1);
        return result(*i0, *i1, *i2);
    }
};
template <>
struct as_deque<4>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::next<I1>::type I2;
        typedef typename fusion::result_of::next<I2>::type I3;
        typedef typename fusion::result_of::next<I3>::type I4;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef typename fusion::result_of::value_of<I1>::type T1;
        typedef typename fusion::result_of::value_of<I2>::type T2;
        typedef typename fusion::result_of::value_of<I3>::type T3;
        typedef deque<T0, T1, T2, T3> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;
        typename gen::I1 i1 = fusion::next(i0);
        typename gen::I2 i2 = fusion::next(i1);
        typename gen::I3 i3 = fusion::next(i2);
        return result(*i0, *i1, *i2, *i3);
    }
};
template <>
struct as_deque<5>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::next<I1>::type I2;
        typedef typename fusion::result_of::next<I2>::type I3;
        typedef typename fusion::result_of::next<I3>::type I4;
        typedef typename fusion::result_of::next<I4>::type I5;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef typename fusion::result_of::value_of<I1>::type T1;
        typedef typename fusion::result_of::value_of<I2>::type T2;
        typedef typename fusion::result_of::value_of<I3>::type T3;
        typedef typename fusion::result_of::value_of<I4>::type T4;
        typedef deque<T0, T1, T2, T3, T4> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;
        typename gen::I1 i1 = fusion::next(i0);
        typename gen::I2 i2 = fusion::next(i1);
        typename gen::I3 i3 = fusion::next(i2);
        typename gen::I4 i4 = fusion::next(i3);
        return result(*i0, *i1, *i2, *i3, *i4);
    }
};
template <>
struct as_deque<6>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::next<I1>::type I2;
        typedef typename fusion::result_of::next<I2>::type I3;
        typedef typename fusion::result_of::next<I3>::type I4;
        typedef typename fusion::result_of::next<I4>::type I5;
        typedef typename fusion::result_of::next<I5>::type I6;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef typename fusion::result_of::value_of<I1>::type T1;
        typedef typename fusion::result_of::value_of<I2>::type T2;
        typedef typename fusion::result_of::value_of<I3>::type T3;
        typedef typename fusion::result_of::value_of<I4>::type T4;
        typedef typename fusion::result_of::value_of<I5>::type T5;
        typedef deque<T0, T1, T2, T3, T4, T5> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;
        typename gen::I1 i1 = fusion::next(i0);
        typename gen::I2 i2 = fusion::next(i1);
        typename gen::I3 i3 = fusion::next(i2);
        typename gen::I4 i4 = fusion::next(i3);
        typename gen::I5 i5 = fusion::next(i4);
        return result(*i0, *i1, *i2, *i3, *i4, *i5);
    }
};
template <>
struct as_deque<7>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::next<I1>::type I2;
        typedef typename fusion::result_of::next<I2>::type I3;
        typedef typename fusion::result_of::next<I3>::type I4;
        typedef typename fusion::result_of::next<I4>::type I5;
        typedef typename fusion::result_of::next<I5>::type I6;
        typedef typename fusion::result_of::next<I6>::type I7;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef typename fusion::result_of::value_of<I1>::type T1;
        typedef typename fusion::result_of::value_of<I2>::type T2;
        typedef typename fusion::result_of::value_of<I3>::type T3;
        typedef typename fusion::result_of::value_of<I4>::type T4;
        typedef typename fusion::result_of::value_of<I5>::type T5;
        typedef typename fusion::result_of::value_of<I6>::type T6;
        typedef deque<T0, T1, T2, T3, T4, T5, T6> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;
        typename gen::I1 i1 = fusion::next(i0);
        typename gen::I2 i2 = fusion::next(i1);
        typename gen::I3 i3 = fusion::next(i2);
        typename gen::I4 i4 = fusion::next(i3);
        typename gen::I5 i5 = fusion::next(i4);
        typename gen::I6 i6 = fusion::next(i5);
        return result(*i0, *i1, *i2, *i3, *i4, *i5, *i6);
    }
};
template <>
struct as_deque<8>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::next<I1>::type I2;
        typedef typename fusion::result_of::next<I2>::type I3;
        typedef typename fusion::result_of::next<I3>::type I4;
        typedef typename fusion::result_of::next<I4>::type I5;
        typedef typename fusion::result_of::next<I5>::type I6;
        typedef typename fusion::result_of::next<I6>::type I7;
        typedef typename fusion::result_of::next<I7>::type I8;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef typename fusion::result_of::value_of<I1>::type T1;
        typedef typename fusion::result_of::value_of<I2>::type T2;
        typedef typename fusion::result_of::value_of<I3>::type T3;
        typedef typename fusion::result_of::value_of<I4>::type T4;
        typedef typename fusion::result_of::value_of<I5>::type T5;
        typedef typename fusion::result_of::value_of<I6>::type T6;
        typedef typename fusion::result_of::value_of<I7>::type T7;
        typedef deque<T0, T1, T2, T3, T4, T5, T6, T7> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;
        typename gen::I1 i1 = fusion::next(i0);
        typename gen::I2 i2 = fusion::next(i1);
        typename gen::I3 i3 = fusion::next(i2);
        typename gen::I4 i4 = fusion::next(i3);
        typename gen::I5 i5 = fusion::next(i4);
        typename gen::I6 i6 = fusion::next(i5);
        typename gen::I7 i7 = fusion::next(i6);
        return result(*i0, *i1, *i2, *i3, *i4, *i5, *i6, *i7);
    }
};
template <>
struct as_deque<9>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::next<I1>::type I2;
        typedef typename fusion::result_of::next<I2>::type I3;
        typedef typename fusion::result_of::next<I3>::type I4;
        typedef typename fusion::result_of::next<I4>::type I5;
        typedef typename fusion::result_of::next<I5>::type I6;
        typedef typename fusion::result_of::next<I6>::type I7;
        typedef typename fusion::result_of::next<I7>::type I8;
        typedef typename fusion::result_of::next<I8>::type I9;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef typename fusion::result_of::value_of<I1>::type T1;
        typedef typename fusion::result_of::value_of<I2>::type T2;
        typedef typename fusion::result_of::value_of<I3>::type T3;
        typedef typename fusion::result_of::value_of<I4>::type T4;
        typedef typename fusion::result_of::value_of<I5>::type T5;
        typedef typename fusion::result_of::value_of<I6>::type T6;
        typedef typename fusion::result_of::value_of<I7>::type T7;
        typedef typename fusion::result_of::value_of<I8>::type T8;
        typedef deque<T0, T1, T2, T3, T4, T5, T6, T7, T8> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;
        typename gen::I1 i1 = fusion::next(i0);
        typename gen::I2 i2 = fusion::next(i1);
        typename gen::I3 i3 = fusion::next(i2);
        typename gen::I4 i4 = fusion::next(i3);
        typename gen::I5 i5 = fusion::next(i4);
        typename gen::I6 i6 = fusion::next(i5);
        typename gen::I7 i7 = fusion::next(i6);
        typename gen::I8 i8 = fusion::next(i7);
        return result(*i0, *i1, *i2, *i3, *i4, *i5, *i6, *i7, *i8);
    }
};
template <>
struct as_deque<10>
{
    template <typename I0>
    struct apply
    {
        typedef typename fusion::result_of::next<I0>::type I1;
        typedef typename fusion::result_of::next<I1>::type I2;
        typedef typename fusion::result_of::next<I2>::type I3;
        typedef typename fusion::result_of::next<I3>::type I4;
        typedef typename fusion::result_of::next<I4>::type I5;
        typedef typename fusion::result_of::next<I5>::type I6;
        typedef typename fusion::result_of::next<I6>::type I7;
        typedef typename fusion::result_of::next<I7>::type I8;
        typedef typename fusion::result_of::next<I8>::type I9;
        typedef typename fusion::result_of::next<I9>::type I10;
        typedef typename fusion::result_of::value_of<I0>::type T0;
        typedef typename fusion::result_of::value_of<I1>::type T1;
        typedef typename fusion::result_of::value_of<I2>::type T2;
        typedef typename fusion::result_of::value_of<I3>::type T3;
        typedef typename fusion::result_of::value_of<I4>::type T4;
        typedef typename fusion::result_of::value_of<I5>::type T5;
        typedef typename fusion::result_of::value_of<I6>::type T6;
        typedef typename fusion::result_of::value_of<I7>::type T7;
        typedef typename fusion::result_of::value_of<I8>::type T8;
        typedef typename fusion::result_of::value_of<I9>::type T9;
        typedef deque<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> type;
    };
    template <typename Iterator>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    static typename apply<Iterator>::type
    call(Iterator const& i0)
    {
        typedef apply<Iterator> gen;
        typedef typename gen::type result;
        typename gen::I1 i1 = fusion::next(i0);
        typename gen::I2 i2 = fusion::next(i1);
        typename gen::I3 i3 = fusion::next(i2);
        typename gen::I4 i4 = fusion::next(i3);
        typename gen::I5 i5 = fusion::next(i4);
        typename gen::I6 i6 = fusion::next(i5);
        typename gen::I7 i7 = fusion::next(i6);
        typename gen::I8 i8 = fusion::next(i7);
        typename gen::I9 i9 = fusion::next(i8);
        return result(*i0, *i1, *i2, *i3, *i4, *i5, *i6, *i7, *i8, *i9);
    }
};
BOOST_FUSION_BARRIER_END
}
}
}
