diff -Naur boost_1_47_0-orig/boost/ptr_container/detail/void_ptr_iterator.hpp boost_1_47_0/boost/ptr_container/detail/void_ptr_iterator.hpp --- boost_1_47_0-orig/boost/ptr_container/detail/void_ptr_iterator.hpp 2011-09-29 14:51:31.860893983 +0100 +++ boost_1_47_0/boost/ptr_container/detail/void_ptr_iterator.hpp 2011-09-30 11:38:28.785314034 +0100 @@ -161,8 +161,22 @@ return r; } + + namespace ptr_container_detail + { + template + struct is_compatible + { + static const bool value = boost::is_same< typename boost::remove_const::type, typename boost::remove_const::type >::value; + }; + } + + template< class VoidIter, class T, class VoidIterU, class U > - inline BOOST_DEDUCED_TYPENAME void_ptr_iterator::difference_type + inline BOOST_DEDUCED_TYPENAME boost::enable_if< + ptr_container_detail::is_compatible, + BOOST_DEDUCED_TYPENAME void_ptr_iterator::difference_type + >::type operator-( void_ptr_iterator l, void_ptr_iterator r ) @@ -173,7 +187,11 @@ template< class VoidIterT, class T, class VoidIterU, class U > - inline bool operator==( const void_ptr_iterator& l, + inline BOOST_DEDUCED_TYPENAME boost::enable_if< + ptr_container_detail::is_compatible, + bool + >::type + operator==( const void_ptr_iterator& l, const void_ptr_iterator& r ) { return l.base() == r.base(); @@ -182,7 +200,11 @@ template< class VoidIterT, class T, class VoidIterU, class U > - inline bool operator!=( const void_ptr_iterator& l, + inline BOOST_DEDUCED_TYPENAME boost::enable_if< + ptr_container_detail::is_compatible, + bool + >::type + operator!=( const void_ptr_iterator& l, const void_ptr_iterator& r ) { return l.base() != r.base(); @@ -191,7 +213,11 @@ template< class VoidIterT, class T, class VoidIterU, class U > - inline bool operator<( const void_ptr_iterator& l, + inline BOOST_DEDUCED_TYPENAME boost::enable_if< + ptr_container_detail::is_compatible, + bool + >::type + operator<( const void_ptr_iterator& l, const void_ptr_iterator& r ) { return l.base() < r.base(); @@ -200,7 +226,11 @@ template< class VoidIterT, class T, class VoidIterU, class U > - inline bool operator<=( const void_ptr_iterator& l, + inline BOOST_DEDUCED_TYPENAME boost::enable_if< + ptr_container_detail::is_compatible, + bool + >::type + operator<=( const void_ptr_iterator& l, const void_ptr_iterator& r ) { return l.base() <= r.base(); @@ -209,7 +239,11 @@ template< class VoidIterT, class T, class VoidIterU, class U > - inline bool operator>( const void_ptr_iterator& l, + inline BOOST_DEDUCED_TYPENAME boost::enable_if< + ptr_container_detail::is_compatible, + bool + >::type + operator>( const void_ptr_iterator& l, const void_ptr_iterator& r ) { return l.base() > r.base(); @@ -218,7 +252,11 @@ template< class VoidIterT, class T, class VoidIterU, class U > - inline bool operator>=( const void_ptr_iterator& l, + inline BOOST_DEDUCED_TYPENAME boost::enable_if< + ptr_container_detail::is_compatible, + bool + >::type + operator>=( const void_ptr_iterator& l, const void_ptr_iterator& r ) { return l.base() >= r.base();