Opened 15 years ago
Closed 14 years ago
#1842 closed Bugs (fixed)
boost::sub_rage::front error
Reported by: | Owned by: | Thorsten Ottosen | |
---|---|---|---|
Milestone: | Boost 1.36.0 | Component: | range |
Version: | Boost 1.35.0 | Severity: | Problem |
Keywords: | sub_range front back reference | Cc: |
Description
I think, there is an error in sub_range::front const method. It use const value_type& instead of const reference.
For example, here is a well compiled code, that fails on last assert, but should not:
#include <list> #include <boost/assign.hpp> #include <boost/assert.hpp> #include <boost/range/sub_range.hpp> #include <boost/iterator/transform_iterator.hpp> //------------------------------------------------------------------------------ struct Trans: public std::unary_function<int, int> { int operator()(const int& a)const { return a*2; } }; //------------------------------------------------------------------------------ int main(int argc, char* argv[]) { using namespace boost::assign; const std::list<int> a=list_of(10); const std::list<int> b=list_of(20); BOOST_ASSERT(!a.empty() && !b.empty()); BOOST_ASSERT(a.front()!=b.front()); BOOST_ASSERT(Trans()(a.front())!=Trans()(b.front())); typedef boost::transform_iterator<Trans, std::list<int>::const_iterator> my_iter_t; typedef std::pair < my_iter_t, my_iter_t > my_pair_t; const boost::sub_range<my_pair_t> ar ( boost::make_transform_iterator(boost::const_begin(a), Trans()), boost::make_transform_iterator(boost::const_end(a), Trans()) ); const boost::sub_range<my_pair_t> br ( boost::make_transform_iterator(boost::const_begin(b), Trans()), boost::make_transform_iterator(boost::const_end(b), Trans()) ); BOOST_ASSERT(ar.front()!=br.front()); // <---- fail return 0; }
Note:
See TracTickets
for help on using tickets.
I've commputed the return value in a different manner now. Should fix your problem.
-Thorsten