diff --git a/include/boost/fusion/algorithm/query/ext_/find_if_s.hpp b/include/boost/fusion/algorithm/query/ext_/find_if_s.hpp index 82c20b4c..0b1852a6 100755 --- a/include/boost/fusion/algorithm/query/ext_/find_if_s.hpp +++ b/include/boost/fusion/algorithm/query/ext_/find_if_s.hpp @@ -117,7 +117,7 @@ namespace boost { namespace fusion { namespace detail private: static type call_(SegmentedRange const &range, mpl::true_) { - return found::call(range, where::call(*range.where)); + return found::call(range, where::call(*range.where_)); } static type call_(SegmentedRange const &range, mpl::false_) diff --git a/include/boost/fusion/view/ext_/segmented_iterator_range.hpp b/include/boost/fusion/view/ext_/segmented_iterator_range.hpp index c4dcd01c..803e642b 100755 --- a/include/boost/fusion/view/ext_/segmented_iterator_range.hpp +++ b/include/boost/fusion/view/ext_/segmented_iterator_range.hpp @@ -12,6 +12,8 @@ #include #include #include +#include +#include #include #include #include @@ -124,26 +126,37 @@ namespace boost { namespace fusion {} template - struct result; + struct result_; template - struct result + struct result_ { typedef segmented_view type; }; template - struct result + struct result_ { typedef segmented_view type; }; template - struct result + struct result_ { typedef Second type; }; + template + struct result; + + template + struct result + : result_< + typename remove_cv::type>::type + , typename remove_cv::type>::type + > + {}; + template segmented_view operator ()(right_view, Second &second) const { @@ -226,7 +239,7 @@ namespace boost { namespace fusion static type call(Sequence &seq) { - return type(range(seq.cons.car.where, fusion::end(seq.cons.car.sequence))); + return type(range(seq.cons.car.where_, fusion::end(seq.cons.car.sequence))); } }; }; @@ -266,7 +279,7 @@ namespace boost { namespace fusion make_multiple_view(detail::full_view()) , make_single_view(detail::left_view()) ) - , segmented_range(fusion::begin(seq.cons.car.sequence), fusion::next(seq.cons.car.where)) + , segmented_range(fusion::begin(seq.cons.car.sequence), fusion::next(seq.cons.car.where_)) , tfx(seq.cons.cdr) ); } @@ -284,7 +297,7 @@ namespace boost { namespace fusion static type call(Sequence &seq) { - return type(range(fusion::begin(seq.cons.car.sequence), seq.cons.car.where)); + return type(range(fusion::begin(seq.cons.car.sequence), seq.cons.car.where_)); } }; }; @@ -437,7 +450,7 @@ namespace boost { namespace fusion static type call(cons const &cons1, cons const &cons2) { - return type(range(cons1.car.where, cons2.car.where)); + return type(range(cons1.car.where_, cons2.car.where_)); } }; diff --git a/test/sequence/ext_/iterator_range_s.cpp b/test/sequence/ext_/iterator_range_s.cpp index 1ed4243f..02a49ad4 100755 --- a/test/sequence/ext_/iterator_range_s.cpp +++ b/test/sequence/ext_/iterator_range_s.cpp @@ -43,8 +43,8 @@ process_tree(Tree const &tree) using namespace fusion; using mpl::_; - typedef typename result_of::find_if_s >::type short_iter; - typedef typename result_of::find_if_s >::type float_iter; + typedef typename fusion::result_of::find_if_s >::type short_iter; + typedef typename fusion::result_of::find_if_s >::type float_iter; typedef iterator_range slice_t; BOOST_STATIC_ASSERT(traits::is_segmented::value);