From 9e6bdc13ba94af4e150afae547557a2fbbfe3bf0 Mon Sep 17 00:00:00 2001 From: Neil Groves Date: Wed, 26 Feb 2014 00:56:27 +0000 Subject: [PATCH] hotfix to regression in integer_range due to recent SFINAE change to iterator_range. --- include/boost/range/irange.hpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/include/boost/range/irange.hpp b/include/boost/range/irange.hpp index f35df47..b1a1240 100644 --- a/include/boost/range/irange.hpp +++ b/include/boost/range/irange.hpp @@ -51,6 +51,7 @@ namespace boost typedef typename base_t::value_type value_type; typedef typename base_t::difference_type difference_type; typedef typename base_t::reference reference; + typedef std::random_access_iterator_tag iterator_category; integer_iterator() : m_value() {} explicit integer_iterator(value_type x) : m_value(x) {} @@ -73,7 +74,11 @@ namespace boost difference_type distance_to(const integer_iterator& other) const { - return other.m_value - m_value; + return is_signed::value + ? (other.m_value - m_value) + : (other.m_value >= m_value) + ? static_cast(other.m_value - m_value) + : -static_cast(m_value - other.m_value); } bool equal(const integer_iterator& other) const @@ -123,6 +128,7 @@ namespace boost typedef typename base_t::value_type value_type; typedef typename base_t::difference_type difference_type; typedef typename base_t::reference reference; + typedef std::random_access_iterator_tag iterator_category; integer_iterator_with_step(value_type first, difference_type step, value_type step_size) : m_first(first) @@ -164,7 +170,7 @@ namespace boost friend class ::boost::iterator_core_access; value_type m_first; - value_type m_step; + difference_type m_step; difference_type m_step_size; };