Ticket #10497: bug_any_range.cpp

File bug_any_range.cpp, 1.0 KB (added by Alex Puchades <alex94puchades+dev@…>, 8 years ago)

The offending code (compile with C++11 support)

Line 
1
2#include <boost/range/adaptor/type_erased.hpp>
3#include <boost/range/adaptor/filtered.hpp>
4#include <boost/iterator/iterator_facade.hpp>
5
6#include <iostream>
7
8template <class T>
9class NumIterator
10 : public boost::iterator_facade <
11 NumIterator<T>,
12 const T,
13 boost::forward_traversal_tag
14 >
15{
16public:
17 NumIterator(T value): val_( value ) {}
18 NumIterator(const NumIterator &) = default;
19
20private:
21 friend class boost::iterator_core_access;
22 void increment() { ++val_; }
23 bool equal(const NumIterator<T> & itr) const { return val_ == itr.val_; }
24 T dereference() const { return val_; }
25
26 T val_;
27};
28
29using AnyIntRange = boost::any_range <
30 int, boost::forward_traversal_tag, int, std::ptrdiff_t
31>;
32
33int main()
34{
35 auto nrange_filt = boost::make_iterator_range(NumIterator<int>(10), NumIterator<int>(20))
36 | boost::adaptors::filtered([](const int n) { return n & 1; });
37
38 AnyIntRange xrange = nrange_filt; // this doesn't compile under G++ v4.8.3
39
40 for(int i : xrange)
41 std::cout << i << std::endl;
42}