summaryrefslogtreecommitdiff
path: root/boost/ptr_container/detail/void_ptr_iterator.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/ptr_container/detail/void_ptr_iterator.hpp')
-rw-r--r--[-rwxr-xr-x]boost/ptr_container/detail/void_ptr_iterator.hpp52
1 files changed, 45 insertions, 7 deletions
diff --git a/boost/ptr_container/detail/void_ptr_iterator.hpp b/boost/ptr_container/detail/void_ptr_iterator.hpp
index 937ffb4aa2..5a96eb4719 100755..100644
--- a/boost/ptr_container/detail/void_ptr_iterator.hpp
+++ b/boost/ptr_container/detail/void_ptr_iterator.hpp
@@ -161,8 +161,22 @@ namespace boost
return r;
}
+
+ namespace ptr_container_detail
+ {
+ template<typename T, typename U>
+ struct is_compatible
+ {
+ static const bool value = boost::is_same< typename boost::remove_const<T>::type, typename boost::remove_const<U>::type >::value;
+ };
+ }
+
+
template< class VoidIter, class T, class VoidIterU, class U >
- inline BOOST_DEDUCED_TYPENAME void_ptr_iterator<VoidIter,T>::difference_type
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ ptr_container_detail::is_compatible<T, U>,
+ BOOST_DEDUCED_TYPENAME void_ptr_iterator<VoidIter,T>::difference_type
+ >::type
operator-( void_ptr_iterator<VoidIter,T> l,
void_ptr_iterator<VoidIterU,U> r )
@@ -173,7 +187,11 @@ namespace boost
template< class VoidIterT, class T, class VoidIterU, class U >
- inline bool operator==( const void_ptr_iterator<VoidIterT,T>& l,
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ ptr_container_detail::is_compatible<T, U>,
+ bool
+ >::type
+ operator==( const void_ptr_iterator<VoidIterT,T>& l,
const void_ptr_iterator<VoidIterU,U>& r )
{
return l.base() == r.base();
@@ -182,7 +200,11 @@ namespace boost
template< class VoidIterT, class T, class VoidIterU, class U >
- inline bool operator!=( const void_ptr_iterator<VoidIterT,T>& l,
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ ptr_container_detail::is_compatible<T, U>,
+ bool
+ >::type
+ operator!=( const void_ptr_iterator<VoidIterT,T>& l,
const void_ptr_iterator<VoidIterU,U>& r )
{
return l.base() != r.base();
@@ -191,7 +213,11 @@ namespace boost
template< class VoidIterT, class T, class VoidIterU, class U >
- inline bool operator<( const void_ptr_iterator<VoidIterT,T>& l,
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ ptr_container_detail::is_compatible<T, U>,
+ bool
+ >::type
+ operator<( const void_ptr_iterator<VoidIterT,T>& l,
const void_ptr_iterator<VoidIterU,U>& r )
{
return l.base() < r.base();
@@ -200,7 +226,11 @@ namespace boost
template< class VoidIterT, class T, class VoidIterU, class U >
- inline bool operator<=( const void_ptr_iterator<VoidIterT,T>& l,
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ ptr_container_detail::is_compatible<T, U>,
+ bool
+ >::type
+ operator<=( const void_ptr_iterator<VoidIterT,T>& l,
const void_ptr_iterator<VoidIterU,U>& r )
{
return l.base() <= r.base();
@@ -209,7 +239,11 @@ namespace boost
template< class VoidIterT, class T, class VoidIterU, class U >
- inline bool operator>( const void_ptr_iterator<VoidIterT,T>& l,
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ ptr_container_detail::is_compatible<T, U>,
+ bool
+ >::type
+ operator>( const void_ptr_iterator<VoidIterT,T>& l,
const void_ptr_iterator<VoidIterU,U>& r )
{
return l.base() > r.base();
@@ -218,7 +252,11 @@ namespace boost
template< class VoidIterT, class T, class VoidIterU, class U >
- inline bool operator>=( const void_ptr_iterator<VoidIterT,T>& l,
+ inline BOOST_DEDUCED_TYPENAME boost::enable_if<
+ ptr_container_detail::is_compatible<T, U>,
+ bool
+ >::type
+ operator>=( const void_ptr_iterator<VoidIterT,T>& l,
const void_ptr_iterator<VoidIterU,U>& r )
{
return l.base() >= r.base();