diff options
Diffstat (limited to 'boost/fusion/container/deque/detail/at_impl.hpp')
-rw-r--r-- | boost/fusion/container/deque/detail/at_impl.hpp | 36 |
1 files changed, 21 insertions, 15 deletions
diff --git a/boost/fusion/container/deque/detail/at_impl.hpp b/boost/fusion/container/deque/detail/at_impl.hpp index dc09d31b7c..0684dcf19e 100644 --- a/boost/fusion/container/deque/detail/at_impl.hpp +++ b/boost/fusion/container/deque/detail/at_impl.hpp @@ -1,8 +1,8 @@ /*============================================================================= - Copyright (c) 2005-2011 Joel de Guzman + Copyright (c) 2005-2012 Joel de Guzman Copyright (c) 2005-2006 Dan Marsden - Distributed under the Boost Software License, Version 1.0. (See accompanying + 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) ==============================================================================*/ #if !defined(BOOST_FUSION_DEQUE_AT_IMPL_09122006_2017) @@ -19,15 +19,15 @@ #include <boost/type_traits/add_const.hpp> #include <boost/type_traits/add_reference.hpp> -namespace boost { namespace fusion { - +namespace boost { namespace fusion +{ struct deque_tag; - namespace extension + namespace extension { template<typename T> struct at_impl; - + template<> struct at_impl<deque_tag> { @@ -37,15 +37,21 @@ namespace boost { namespace fusion { typedef typename Sequence::next_up next_up; typedef typename Sequence::next_down next_down; BOOST_MPL_ASSERT_RELATION(next_down::value, !=, next_up::value); - - typedef mpl::plus<next_down, mpl::int_<1> > offset; - typedef mpl::int_<mpl::plus<N, offset>::value> adjusted_index; - typedef typename detail::keyed_element_value_at<Sequence, adjusted_index>::type element_type; - typedef typename add_reference< - typename mpl::eval_if< - is_const<Sequence>, - add_const<element_type>, - mpl::identity<element_type> >::type>::type type; + + static int const offset = next_down::value + 1; + typedef mpl::int_<(N::value + offset)> adjusted_index; + typedef typename + detail::keyed_element_value_at<Sequence, adjusted_index>::type + element_type; + + typedef typename + add_reference< + typename mpl::eval_if< + is_const<Sequence>, + add_const<element_type>, + mpl::identity<element_type> >::type + >::type + type; static type call(Sequence& seq) { |