diff options
Diffstat (limited to 'boost/geometry/iterators/closing_iterator.hpp')
-rw-r--r-- | boost/geometry/iterators/closing_iterator.hpp | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/boost/geometry/iterators/closing_iterator.hpp b/boost/geometry/iterators/closing_iterator.hpp index a9f67d4788..e263f3aafb 100644 --- a/boost/geometry/iterators/closing_iterator.hpp +++ b/boost/geometry/iterators/closing_iterator.hpp @@ -42,12 +42,14 @@ struct closing_iterator boost::random_access_traversal_tag > { + typedef typename boost::range_difference<Range>::type difference_type; + /// Constructor including the range it is based on explicit inline closing_iterator(Range& range) : m_range(&range) , m_iterator(boost::begin(range)) , m_end(boost::end(range)) - , m_size(boost::size(range)) + , m_size(static_cast<difference_type>(boost::size(range))) , m_index(0) {} @@ -56,8 +58,8 @@ struct closing_iterator : m_range(&range) , m_iterator(boost::end(range)) , m_end(boost::end(range)) - , m_size(boost::size(range)) - , m_index(m_size + 1) + , m_size(static_cast<difference_type>(boost::size(range))) + , m_index((m_size == 0) ? 0 : m_size + 1) {} /// Default constructor @@ -67,18 +69,6 @@ struct closing_iterator , m_index(0) {} - inline closing_iterator<Range>& operator=(closing_iterator<Range> const& source) - { - m_range = source.m_range; - m_iterator = source.m_iterator; - m_end = source.m_end; - m_size = source.m_size; - m_index = source.m_index; - return *this; - } - - typedef std::ptrdiff_t difference_type; - private: friend class boost::iterator_core_access; |