summaryrefslogtreecommitdiff
path: root/boost/fusion/container/map/detail/at_impl.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/fusion/container/map/detail/at_impl.hpp')
-rw-r--r--boost/fusion/container/map/detail/at_impl.hpp43
1 files changed, 21 insertions, 22 deletions
diff --git a/boost/fusion/container/map/detail/at_impl.hpp b/boost/fusion/container/map/detail/at_impl.hpp
index 025c1724a1..c2a565ebe0 100644
--- a/boost/fusion/container/map/detail/at_impl.hpp
+++ b/boost/fusion/container/map/detail/at_impl.hpp
@@ -1,17 +1,14 @@
/*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Copyright (c) 2011 Brandon Kohn
+ Copyright (c) 2001-2013 Joel de Guzman
- 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_MAP_DETAIL_AT_IMPL_HPP)
-#define BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP
+#if !defined(BOOST_FUSION_MAP_DETAIL_AT_IMPL_02042013_0821)
+#define BOOST_FUSION_MAP_DETAIL_AT_IMPL_02042013_0821
+#include <boost/fusion/support/config.hpp>
#include <boost/fusion/support/detail/access.hpp>
-#include <boost/type_traits/is_const.hpp>
-#include <boost/mpl/at.hpp>
-#include <boost/mpl/int.hpp>
namespace boost { namespace fusion
{
@@ -26,36 +23,38 @@ namespace boost { namespace fusion
struct at_impl<map_tag>
{
template <typename Sequence, typename N>
- struct apply
+ struct apply
{
- typedef typename
- mpl::at<typename Sequence::storage_type::types, N>::type
- element;
- typedef typename detail::ref_result<element>::type type;
-
+ typedef mpl::int_<N::value> index;
+ typedef
+ decltype(std::declval<Sequence>().get(index()))
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence& m)
{
- return m.get_data().at_impl(N());
+ return m.get(index());
}
};
template <typename Sequence, typename N>
struct apply<Sequence const, N>
{
- typedef typename
- mpl::at<typename Sequence::storage_type::types, N>::type
- element;
- typedef typename detail::cref_result<element>::type type;
-
+ typedef mpl::int_<N::value> index;
+ typedef
+ decltype(std::declval<Sequence const>().get(index()))
+ type;
+
+ BOOST_FUSION_GPU_ENABLED
static type
call(Sequence const& m)
{
- return m.get_data().at_impl(N());
+ return m.get(index());
}
};
};
}
}}
-#endif //BOOST_FUSION_MAP_DETAIL_AT_IMPL_HPP
+#endif