From cb5b63fa93f0fb7f07ce63662c47a814da19fefd Mon Sep 17 00:00:00 2001 From: Hartmut Kaiser Date: Fri, 25 Sep 2009 17:24:55 +0000 Subject: [PATCH] Fusion: fixed another const correctness problem [SVN r56383] --- include/boost/fusion/view/nview/nview.hpp | 27 ++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/include/boost/fusion/view/nview/nview.hpp b/include/boost/fusion/view/nview/nview.hpp index f3011834..fe8d35cf 100644 --- a/include/boost/fusion/view/nview/nview.hpp +++ b/include/boost/fusion/view/nview/nview.hpp @@ -31,7 +31,7 @@ namespace boost { namespace fusion struct result; template - struct result : boost::add_reference {}; + struct result : add_reference {}; template typename boost::result_of::type @@ -40,6 +40,24 @@ namespace boost { namespace fusion return x; } }; + + struct addconstref + { + template + struct result; + + template + struct result + : add_reference::type> + {}; + + template + typename boost::result_of::type + operator()(T& x) const + { + return x; + } + }; } struct nview_tag; @@ -58,12 +76,15 @@ namespace boost { namespace fusion typedef Indicies index_type; typedef typename mpl::size::type size; - typedef transform_view transform_view_type; + typedef typename mpl::if_< + is_const, detail::addconstref, detail::addref + >::type transform_type; + typedef transform_view transform_view_type; typedef typename result_of::as_vector::type sequence_type; explicit nview(Sequence& val) - : seq(as_vector(transform_view_type(val, detail::addref()))) + : seq(sequence_type(transform_view_type(val, transform_type()))) {} sequence_type seq;