diff --git a/include/wx/vector.h b/include/wx/vector.h index ed4bbd3a40..446af9a12c 100644 --- a/include/wx/vector.h +++ b/include/wx/vector.h @@ -170,6 +170,8 @@ public: { return reverse_iterator(m_ptr + n); } reverse_iterator& operator-=(difference_type n) { m_ptr += n; return *this; } + difference_type operator-(const reverse_iterator& it) const + { return it.m_ptr - m_ptr; } reference operator[](difference_type n) const { return *(*this + n); } @@ -215,6 +217,8 @@ public: { return const_reverse_iterator(m_ptr + n); } const_reverse_iterator& operator-=(difference_type n) { m_ptr += n; return *this; } + difference_type operator-(const const_reverse_iterator& it) const + { return it.m_ptr - m_ptr; } const_reference operator[](difference_type n) const { return *(*this + n); } diff --git a/tests/vectors/vectors.cpp b/tests/vectors/vectors.cpp index 070babe160..62e12e290e 100644 --- a/tests/vectors/vectors.cpp +++ b/tests/vectors/vectors.cpp @@ -331,3 +331,23 @@ TEST_CASE("wxVector::operator==", "[vector][compare]") v2.push_back("baz"); CHECK( v1 != v2 ); } + +TEST_CASE("wxVector::reverse_iterator", "[vector][reverse_iterator]") +{ + wxVector v; + for ( int i = 0; i < 10; ++i ) + v.push_back(i + 1); + + const wxVector::reverse_iterator rb = v.rbegin(); + const wxVector::reverse_iterator re = v.rend(); + CHECK( re - rb == 10 ); + + wxVector::reverse_iterator ri = rb; + ++ri; + CHECK( ri - rb == 1 ); + CHECK( re - ri == 9 ); + + ri = rb + 2; + CHECK( ri - rb == 2 ); + CHECK( re - ri == 8 ); +}