id,summary,reporter,owner,description,type,status,milestone,component,version,severity,resolution,keywords,cc 12071,Using iterator_facade with range-v3 fails to compile,Krzysztof Czaiński <1czajnik@…>,jeffrey.hellrung,"The fact that {{{postfix_increment_proxy}}} is not {{{DefaultConstructible}}} and doesn't have a nested public {{{value_type}}} makes iterators unusable with range-v3, which check the concepts. Example: {{{ #include ""boost/iterator/iterator_facade.hpp"" #include ""range/v3/utility/iterator.hpp"" template class TestIter : public boost::iterator_facade, V, Category, V> { public: using typename boost::iterator_facade, 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; static_assert(ranges::InputIterator(), """"); void f(InIter x) { static_assert(ranges::Readable(), """"); static_assert(ranges::DefaultConstructible(), """"); } }}} I think {{{static_assert(ranges::InputIterator(), """")}}} fails, because the two static_asserts in {{{f()}}} fail. From what I've learned here: https://github.com/ericniebler/range-v3/issues/304 it seems a good idea to fix {{{postfix_increment_proxy}}} to conform to these requirements. Ditto {{{writable_postfix_increment_proxy}}}.",Bugs,new,To Be Determined,iterator,Boost 1.61.0,Problem,,range-v3,