Ticket #8488: main.cpp

File main.cpp, 1.2 KB (added by gredner@…, 10 years ago)

Self-contained test case demonstrating the problem

Line 
1#include <boost/iterator/iterator_facade.hpp>
2
3#include <vector>
4#include <iterator>
5#include <iostream>
6
7class vector_iterator
8 : public boost::iterator_facade<
9 vector_iterator,
10 int,
11 boost::random_access_traversal_tag>
12{
13public:
14
15 vector_iterator(char tag, std::vector<int>::iterator it) : _tag(tag), _it(it) {}
16
17private:
18 friend class boost::iterator_core_access;
19
20 int& dereference() const { return *_it; }
21 bool equal(vector_iterator const& other) const { return _it == other._it; }
22 void increment() { ++_it; }
23 void decrement() { --_it; }
24 void advance(int n) { std::advance(_it, n); }
25
26 std::vector<int>::iterator::difference_type
27 distance_to(const vector_iterator& other) const
28 {
29 std::cerr << _tag << ".distance_to(" << other._tag << ")\n";
30 std::vector<int>::iterator::difference_type result = std::distance(_it, other._it);
31 std::cerr << "result = " << result << '\n';
32 return result;
33 }
34
35private:
36 const char _tag;
37 std::vector<int>::iterator _it;
38};
39
40int main()
41{
42 std::vector<int> v;
43 v.push_back(1);
44 v.push_back(2);
45
46 vector_iterator a('a', v.begin());
47 vector_iterator b('b', v.end());
48
49 std::cerr << std::distance(a, b) << '\n';
50}