/*=============================================================================
    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 {
struct deque_tag;
template<typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
struct deque
    :
    detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type,
    sequence_base<deque<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> >
{
    typedef deque_tag fusion_tag;
    typedef bidirectional_traversal_tag category;
    typedef typename detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type base;
    typedef typename detail::deque_initial_size<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type size;
    typedef mpl::int_<size::value> next_up;
    typedef mpl::int_<-1> next_down;
    typedef mpl::false_ is_view;
# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(typename detail::call_param<T0 >::type t0, typename detail::call_param<T1 >::type t1)
        : base(detail::deque_keyed_values<T0, T1>::construct(t0, t1))
    {}
# endif
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T0 const& t0, T1 const& t1)
        : base(detail::deque_keyed_values<T0, T1>::construct(t0, t1))
    {}
    template <typename T_0, typename T_1>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T_0 && t0, T_1 && t1)
        : base(detail::deque_keyed_values<T0, T1>::
               forward_(std::forward<T_0>( t0), std::forward<T_1>( t1)))
    {}
# endif
# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(typename detail::call_param<T0 >::type t0, typename detail::call_param<T1 >::type t1, typename detail::call_param<T2 >::type t2)
        : base(detail::deque_keyed_values<T0, T1, T2>::construct(t0, t1, t2))
    {}
# endif
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T0 const& t0, T1 const& t1, T2 const& t2)
        : base(detail::deque_keyed_values<T0, T1, T2>::construct(t0, t1, t2))
    {}
    template <typename T_0, typename T_1, typename T_2>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T_0 && t0, T_1 && t1, T_2 && t2)
        : base(detail::deque_keyed_values<T0, T1, T2>::
               forward_(std::forward<T_0>( t0), std::forward<T_1>( t1), std::forward<T_2>( t2)))
    {}
# endif
# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(typename detail::call_param<T0 >::type t0, typename detail::call_param<T1 >::type t1, typename detail::call_param<T2 >::type t2, typename detail::call_param<T3 >::type t3)
        : base(detail::deque_keyed_values<T0, T1, T2, T3>::construct(t0, t1, t2, t3))
    {}
# endif
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T0 const& t0, T1 const& t1, T2 const& t2, T3 const& t3)
        : base(detail::deque_keyed_values<T0, T1, T2, T3>::construct(t0, t1, t2, t3))
    {}
    template <typename T_0, typename T_1, typename T_2, typename T_3>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T_0 && t0, T_1 && t1, T_2 && t2, T_3 && t3)
        : base(detail::deque_keyed_values<T0, T1, T2, T3>::
               forward_(std::forward<T_0>( t0), std::forward<T_1>( t1), std::forward<T_2>( t2), std::forward<T_3>( t3)))
    {}
# endif
# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(typename detail::call_param<T0 >::type t0, typename detail::call_param<T1 >::type t1, typename detail::call_param<T2 >::type t2, typename detail::call_param<T3 >::type t3, typename detail::call_param<T4 >::type t4)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4>::construct(t0, t1, t2, t3, t4))
    {}
# endif
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T0 const& t0, T1 const& t1, T2 const& t2, T3 const& t3, T4 const& t4)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4>::construct(t0, t1, t2, t3, t4))
    {}
    template <typename T_0, typename T_1, typename T_2, typename T_3, typename T_4>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T_0 && t0, T_1 && t1, T_2 && t2, T_3 && t3, T_4 && t4)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4>::
               forward_(std::forward<T_0>( t0), std::forward<T_1>( t1), std::forward<T_2>( t2), std::forward<T_3>( t3), std::forward<T_4>( t4)))
    {}
# endif
# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(typename detail::call_param<T0 >::type t0, typename detail::call_param<T1 >::type t1, typename detail::call_param<T2 >::type t2, typename detail::call_param<T3 >::type t3, typename detail::call_param<T4 >::type t4, typename detail::call_param<T5 >::type t5)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5>::construct(t0, t1, t2, t3, t4, t5))
    {}
# endif
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T0 const& t0, T1 const& t1, T2 const& t2, T3 const& t3, T4 const& t4, T5 const& t5)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5>::construct(t0, t1, t2, t3, t4, t5))
    {}
    template <typename T_0, typename T_1, typename T_2, typename T_3, typename T_4, typename T_5>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T_0 && t0, T_1 && t1, T_2 && t2, T_3 && t3, T_4 && t4, T_5 && t5)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5>::
               forward_(std::forward<T_0>( t0), std::forward<T_1>( t1), std::forward<T_2>( t2), std::forward<T_3>( t3), std::forward<T_4>( t4), std::forward<T_5>( t5)))
    {}
# endif
# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(typename detail::call_param<T0 >::type t0, typename detail::call_param<T1 >::type t1, typename detail::call_param<T2 >::type t2, typename detail::call_param<T3 >::type t3, typename detail::call_param<T4 >::type t4, typename detail::call_param<T5 >::type t5, typename detail::call_param<T6 >::type t6)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6>::construct(t0, t1, t2, t3, t4, t5, t6))
    {}
# endif
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T0 const& t0, T1 const& t1, T2 const& t2, T3 const& t3, T4 const& t4, T5 const& t5, T6 const& t6)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6>::construct(t0, t1, t2, t3, t4, t5, t6))
    {}
    template <typename T_0, typename T_1, typename T_2, typename T_3, typename T_4, typename T_5, typename T_6>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T_0 && t0, T_1 && t1, T_2 && t2, T_3 && t3, T_4 && t4, T_5 && t5, T_6 && t6)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6>::
               forward_(std::forward<T_0>( t0), std::forward<T_1>( t1), std::forward<T_2>( t2), std::forward<T_3>( t3), std::forward<T_4>( t4), std::forward<T_5>( t5), std::forward<T_6>( t6)))
    {}
# endif
# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(typename detail::call_param<T0 >::type t0, typename detail::call_param<T1 >::type t1, typename detail::call_param<T2 >::type t2, typename detail::call_param<T3 >::type t3, typename detail::call_param<T4 >::type t4, typename detail::call_param<T5 >::type t5, typename detail::call_param<T6 >::type t6, typename detail::call_param<T7 >::type t7)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7>::construct(t0, t1, t2, t3, t4, t5, t6, t7))
    {}
# endif
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T0 const& t0, T1 const& t1, T2 const& t2, T3 const& t3, T4 const& t4, T5 const& t5, T6 const& t6, T7 const& t7)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7>::construct(t0, t1, t2, t3, t4, t5, t6, t7))
    {}
    template <typename T_0, typename T_1, typename T_2, typename T_3, typename T_4, typename T_5, typename T_6, typename T_7>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T_0 && t0, T_1 && t1, T_2 && t2, T_3 && t3, T_4 && t4, T_5 && t5, T_6 && t6, T_7 && t7)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7>::
               forward_(std::forward<T_0>( t0), std::forward<T_1>( t1), std::forward<T_2>( t2), std::forward<T_3>( t3), std::forward<T_4>( t4), std::forward<T_5>( t5), std::forward<T_6>( t6), std::forward<T_7>( t7)))
    {}
# endif
# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(typename detail::call_param<T0 >::type t0, typename detail::call_param<T1 >::type t1, typename detail::call_param<T2 >::type t2, typename detail::call_param<T3 >::type t3, typename detail::call_param<T4 >::type t4, typename detail::call_param<T5 >::type t5, typename detail::call_param<T6 >::type t6, typename detail::call_param<T7 >::type t7, typename detail::call_param<T8 >::type t8)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7, T8>::construct(t0, t1, t2, t3, t4, t5, t6, t7, t8))
    {}
# endif
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T0 const& t0, T1 const& t1, T2 const& t2, T3 const& t3, T4 const& t4, T5 const& t5, T6 const& t6, T7 const& t7, T8 const& t8)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7, T8>::construct(t0, t1, t2, t3, t4, t5, t6, t7, t8))
    {}
    template <typename T_0, typename T_1, typename T_2, typename T_3, typename T_4, typename T_5, typename T_6, typename T_7, typename T_8>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T_0 && t0, T_1 && t1, T_2 && t2, T_3 && t3, T_4 && t4, T_5 && t5, T_6 && t6, T_7 && t7, T_8 && t8)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7, T8>::
               forward_(std::forward<T_0>( t0), std::forward<T_1>( t1), std::forward<T_2>( t2), std::forward<T_3>( t3), std::forward<T_4>( t4), std::forward<T_5>( t5), std::forward<T_6>( t6), std::forward<T_7>( t7), std::forward<T_8>( t8)))
    {}
# endif
# if defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(typename detail::call_param<T0 >::type t0, typename detail::call_param<T1 >::type t1, typename detail::call_param<T2 >::type t2, typename detail::call_param<T3 >::type t3, typename detail::call_param<T4 >::type t4, typename detail::call_param<T5 >::type t5, typename detail::call_param<T6 >::type t6, typename detail::call_param<T7 >::type t7, typename detail::call_param<T8 >::type t8, typename detail::call_param<T9 >::type t9)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::construct(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9))
    {}
# endif
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T0 const& t0, T1 const& t1, T2 const& t2, T3 const& t3, T4 const& t4, T5 const& t5, T6 const& t6, T7 const& t7, T8 const& t8, T9 const& t9)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::construct(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9))
    {}
    template <typename T_0, typename T_1, typename T_2, typename T_3, typename T_4, typename T_5, typename T_6, typename T_7, typename T_8, typename T_9>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(T_0 && t0, T_1 && t1, T_2 && t2, T_3 && t3, T_4 && t4, T_5 && t5, T_6 && t6, T_7 && t7, T_8 && t8, T_9 && t9)
        : base(detail::deque_keyed_values<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::
               forward_(std::forward<T_0>( t0), std::forward<T_1>( t1), std::forward<T_2>( t2), std::forward<T_3>( t3), std::forward<T_4>( t4), std::forward<T_5>( t5), std::forward<T_6>( t6), std::forward<T_7>( t7), std::forward<T_8>( t8), std::forward<T_9>( t9)))
    {}
# endif
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque()
    {}
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    explicit
    deque(typename detail::call_param<T0>::type t0)
        : base(t0, detail::nil_keyed_element())
    {}
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    explicit
    deque(deque const& rhs)
        : base(rhs)
    {}
    template<typename U0, typename U1, typename U2, typename U3, typename U4, typename U5, typename U6, typename U7, typename U8, typename U9>
    BOOST_FUSION_GPU_ENABLED
    deque(deque<U0, U1, U2, U3, U4, U5, U6, U7, U8, U9> const& seq)
        : base(seq)
    {}
    template<typename Sequence>
    BOOST_FUSION_GPU_ENABLED
    deque(Sequence const& seq
          , typename disable_if<is_convertible<Sequence, T0>, detail::enabler_>::type = detail::enabler
          , typename enable_if<traits::is_sequence<Sequence>, detail::enabler_>::type = detail::enabler)
        : base(base::from_iterator(fusion::begin(seq)))
    {}
    template <typename T>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque&
    operator=(T const& rhs)
    {
        base::operator=(rhs);
        return *this;
    }
# if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
    template <typename T0_>
    BOOST_FUSION_GPU_ENABLED
    explicit
    deque(T0_&& t0
          , typename enable_if<is_convertible<T0_, T0>, detail::enabler_>::type = detail::enabler
          , typename disable_if_c<
          boost::is_same<deque const, typename boost::remove_reference<T0_>::type const>::value
          , detail::enabler_
          >::type = detail::enabler
         )
        : base(std::forward<T0_>( t0), detail::nil_keyed_element())
    {}
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    explicit
    deque(deque&& rhs)
        : base(std::forward<deque>(rhs))
    {}
    template<typename U0, typename U1, typename U2, typename U3, typename U4, typename U5, typename U6, typename U7, typename U8, typename U9>
    BOOST_FUSION_GPU_ENABLED
    deque(deque<U0, U1, U2, U3, U4, U5, U6, U7, U8, U9>&& seq
          , typename disable_if<
          is_convertible<deque<U0, U1, U2, U3, U4, U5, U6, U7, U8, U9>, T0>
          , detail::enabler_
          >::type = detail::enabler)
        : base(std::forward<deque<U0, U1, U2, U3, U4, U5, U6, U7, U8, U9>>(seq))
    {}
    template <typename T>
    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque&
    operator=(T&& rhs)
    {
        base::operator=(std::forward<T>( rhs));
        return *this;
    }

    BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque&
    operator=(deque const& rhs)
    {
        base::operator=(static_cast<base const&>(rhs));
        return *this;
    }
# endif
};
template <>
struct deque<> : detail::nil_keyed_element
{
    typedef deque_tag fusion_tag;
    typedef bidirectional_traversal_tag category;
    typedef mpl::int_<0> size;
    typedef mpl::int_<0> next_up;
    typedef mpl::int_<-1> next_down;
    typedef mpl::false_ is_view;
    template <typename Sequence>
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque(Sequence const&,
          typename enable_if<
          mpl::and_<
          traits::is_sequence<Sequence>
    , result_of::empty<Sequence> >, detail::enabler_>::type = detail::enabler) BOOST_NOEXCEPT
    {}
    BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
    deque() BOOST_NOEXCEPT {}
};
}
}
