diff --git a/include/boost/fusion/container/map/map_iterator.hpp b/include/boost/fusion/container/map/map_iterator.hpp index 03242026..4927e155 100644 --- a/include/boost/fusion/container/map/map_iterator.hpp +++ b/include/boost/fusion/container/map/map_iterator.hpp @@ -12,7 +12,10 @@ #include #include #include +#include #include +#include +#include namespace boost { namespace fusion { @@ -83,11 +86,18 @@ namespace boost { namespace fusion { typedef typename Iterator::sequence sequence; typedef typename Iterator::index index; + + typedef decltype(boost::declval().get(index()).second) second_type_; + typedef typename - add_reference< - decltype(boost::declval().get(index()).second) + mpl::if_< + is_const + , typename add_const::type + , second_type_ >::type - type; + second_type; + + typedef typename add_reference::type type; BOOST_FUSION_GPU_ENABLED static type diff --git a/test/sequence/map.cpp b/test/sequence/map.cpp index 9e4ecafb..8795dda0 100644 --- a/test/sequence/map.cpp +++ b/test/sequence/map.cpp @@ -148,6 +148,15 @@ main() typedef boost::fusion::result_of::deref_data::type r_type; BOOST_STATIC_ASSERT((boost::is_same::value)); } + + { + // compile test only + // make sure result_of::deref_data is const correct + typedef map > const map_type; + typedef boost::fusion::result_of::begin::type i_type; + typedef boost::fusion::result_of::deref_data::type r_type; + BOOST_STATIC_ASSERT((boost::is_same::value)); + } return boost::report_errors(); }