diff --git a/include/boost/iterator/iterator_adaptor.hpp b/include/boost/iterator/iterator_adaptor.hpp index 14600f0..0f8a9bf 100644 --- a/include/boost/iterator/iterator_adaptor.hpp +++ b/include/boost/iterator/iterator_adaptor.hpp @@ -273,11 +273,27 @@ namespace boost void advance(typename super_t::difference_type n) { + BOOST_STATIC_ASSERT( + (detail::is_tag< + random_access_traversal_tag + , typename super_t::iterator_category::traversal + >::value) + ); m_iterator += n; } void increment() { ++m_iterator; } - void decrement() { --m_iterator; } + + void decrement() + { + BOOST_STATIC_ASSERT( + (detail::is_tag< + bidirectional_traversal_tag + , typename super_t::iterator_category::traversal + >::value) + ); + --m_iterator; + } template < class OtherDerived, class OtherIterator, class V, class C, class R, class D @@ -285,10 +301,16 @@ namespace boost typename super_t::difference_type distance_to( iterator_adaptor const& y) const { - // Maybe readd with same_distance - // BOOST_STATIC_ASSERT( - // (detail::same_category_and_difference::value) - // ); + BOOST_STATIC_ASSERT( + (detail::is_tag< + random_access_traversal_tag + , typename super_t::iterator_category::traversal + >::value) + ); + // Maybe readd with same_distance + // BOOST_STATIC_ASSERT( + // (detail::same_category_and_difference::value) + // ); return y.base() - m_iterator; }