[iterator] Using iterator_facade with range-v3

I'm having trouble using iterators implemented in terms of boost::iterator_facade with the range-v3 library. The problem is decltype(it++) which in my case is postfix_increment_proxy<>, desn't model the Readable concept, because it isn't DefaultConstructible and doesn't have a ppublic value_type nested typedef. To me it seems reasonable to require decltype(it++) to model Readable, so I created a ticket (a test case and a patch with the proposed solution included) please see: https://svn.boost.org/trac/boost/ticket/12071 See also the discussion at range-v3: https://github.com/ericniebler/range-v3/issues/304 Kind regards, Kris

Maybe a high-level example demonstrating the problem will be helpful: #include <iostream> #include "third_party/boost/allowed/iterator/iterator_facade.hpp" #include "third_party/range_v3/include/range/v3/algorithm/copy.hpp" #include "third_party/range_v3/include/range/v3/iterator_range.hpp" #include "third_party/range_v3/include/range/v3/utility/iterator.hpp" template <class V, class Category> class TestIter : public boost::iterator_facade<TestIter<V, Category>, V, Category, V> { public: using typename boost::iterator_facade<TestIter<V, Category>, V, Category, V>::difference_type; TestIter() : v_() {} explicit TestIter(V v) : v_(v) {} private: friend class boost::iterator_core_access; V dereference() const { return v_; } bool equal(const TestIter& other) const { return v_ == other.v_; } void increment() { ++v_; } void decrement() { --v_; } void advance(difference_type n) { v_ += n; } difference_type distance_to(const TestIter& other) const { return other.v_ - v_; } V v_; }; using InIter = TestIter<int, std::input_iterator_tag>; template <class R> void print(R&& r) { ranges::copy(std::forward<R>(r), ranges::ostream_iterator<>(std::cout, ", ")); std::cout << "\n"; } int main() { print(ranges::make_iterator_range(InIter(1), InIter(10))); } 2016-04-11 16:34 GMT+02:00 Krzysztof Czainski <1czajnik@gmail.com>:
I'm having trouble using iterators implemented in terms of boost::iterator_facade with the range-v3 library.
The problem is decltype(it++) which in my case is postfix_increment_proxy<>, desn't model the Readable concept, because it isn't DefaultConstructible and doesn't have a ppublic value_type nested typedef.
To me it seems reasonable to require decltype(it++) to model Readable, so I created a ticket (a test case and a patch with the proposed solution included) please see: https://svn.boost.org/trac/boost/ticket/12071
See also the discussion at range-v3: https://github.com/ericniebler/range-v3/issues/304
Kind regards, Kris
participants (1)
-
Krzysztof Czainski