Fixed unqualified iterator_to_pointer & to_raw_pointer calls that were causing compilation problems due to ADL.

This commit is contained in:
Ion Gaztañaga
2014-06-16 00:23:19 +02:00
parent 3b1d9af986
commit 819b365f5e
3 changed files with 23 additions and 49 deletions

View File

@@ -182,7 +182,7 @@ inline
typename boost::intrusive::pointer_traits typename boost::intrusive::pointer_traits
<typename std::iterator_traits<Iterator>::pointer>::element_type* <typename std::iterator_traits<Iterator>::pointer>::element_type*
iterator_to_raw_pointer(const Iterator &i) iterator_to_raw_pointer(const Iterator &i)
{ return to_raw_pointer(iterator_to_pointer(i)); } { return (to_raw_pointer)((iterator_to_pointer)(i)); }
template<class AllocatorType> template<class AllocatorType>
@@ -352,7 +352,7 @@ inline F memmove(I f, I l, F r) BOOST_CONTAINER_NOEXCEPT
{ {
typedef typename std::iterator_traits<I>::value_type value_type; typedef typename std::iterator_traits<I>::value_type value_type;
typename std::iterator_traits<I>::difference_type n = std::distance(f, l); typename std::iterator_traits<I>::difference_type n = std::distance(f, l);
::memmove(iterator_to_raw_pointer(r), iterator_to_raw_pointer(f), sizeof(value_type)*n); ::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
std::advance(r, n); std::advance(r, n);
return r; return r;
} }
@@ -363,7 +363,7 @@ template
F memmove_n(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT F memmove_n(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
{ {
typedef typename std::iterator_traits<I>::value_type value_type; typedef typename std::iterator_traits<I>::value_type value_type;
::memmove(iterator_to_raw_pointer(r), iterator_to_raw_pointer(f), sizeof(value_type)*n); ::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
std::advance(r, n); std::advance(r, n);
return r; return r;
} }
@@ -374,7 +374,7 @@ template
I memmove_n_source(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT I memmove_n_source(I f, typename std::iterator_traits<I>::difference_type n, F r) BOOST_CONTAINER_NOEXCEPT
{ {
typedef typename std::iterator_traits<I>::value_type value_type; typedef typename std::iterator_traits<I>::value_type value_type;
::memmove(iterator_to_raw_pointer(r), iterator_to_raw_pointer(f), sizeof(value_type)*n); ::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
std::advance(f, n); std::advance(f, n);
return f; return f;
} }
@@ -385,7 +385,7 @@ template
I memmove_n_source_dest(I f, typename std::iterator_traits<I>::difference_type n, F &r) BOOST_CONTAINER_NOEXCEPT I memmove_n_source_dest(I f, typename std::iterator_traits<I>::difference_type n, F &r) BOOST_CONTAINER_NOEXCEPT
{ {
typedef typename std::iterator_traits<I>::value_type value_type; typedef typename std::iterator_traits<I>::value_type value_type;
::memmove(iterator_to_raw_pointer(r), iterator_to_raw_pointer(f), sizeof(value_type)*n); ::memmove((iterator_to_raw_pointer)(r), (iterator_to_raw_pointer)(f), sizeof(value_type)*n);
std::advance(f, n); std::advance(f, n);
std::advance(r, n); std::advance(r, n);
return f; return f;

View File

@@ -235,11 +235,8 @@ class stable_vector_iterator
rebind_pointer<const value_type>::type rebind_pointer<const value_type>::type
, Pointer , Pointer
>::type pointer; >::type pointer;
typedef typename ::boost::container::container_detail::if_c typedef boost::intrusive::pointer_traits<pointer> ptr_traits;
< IsConst typedef typename ptr_traits::reference reference;
, const value_type&
, value_type&
>::type reference;
private: private:
typedef typename non_const_ptr_traits::template typedef typename non_const_ptr_traits::template
@@ -255,11 +252,11 @@ class stable_vector_iterator
typedef typename non_const_ptr_traits::template typedef typename non_const_ptr_traits::template
rebind_pointer<node_base_ptr>::type node_base_ptr_ptr; rebind_pointer<node_base_ptr>::type node_base_ptr_ptr;
node_ptr m_pn; node_base_ptr m_pn;
public: public:
explicit stable_vector_iterator(node_ptr p) BOOST_CONTAINER_NOEXCEPT explicit stable_vector_iterator(node_base_ptr p) BOOST_CONTAINER_NOEXCEPT
: m_pn(p) : m_pn(p)
{} {}
@@ -270,30 +267,22 @@ class stable_vector_iterator
: m_pn(other.node_pointer()) : m_pn(other.node_pointer())
{} {}
node_ptr &node_pointer() BOOST_CONTAINER_NOEXCEPT node_ptr node_pointer() const BOOST_CONTAINER_NOEXCEPT
{ return m_pn; } { return node_ptr_traits::static_cast_from(m_pn); }
const node_ptr &node_pointer() const BOOST_CONTAINER_NOEXCEPT
{ return m_pn; }
public: public:
//Pointer like operators //Pointer like operators
reference operator*() const BOOST_CONTAINER_NOEXCEPT reference operator*() const BOOST_CONTAINER_NOEXCEPT
{ return m_pn->value; } { return node_pointer()->value; }
pointer operator->() const BOOST_CONTAINER_NOEXCEPT pointer operator->() const BOOST_CONTAINER_NOEXCEPT
{ { return ptr_traits::pointer_to(this->operator*()); }
typedef boost::intrusive::pointer_traits<pointer> ptr_traits;
return ptr_traits::pointer_to(this->operator*());
}
//Increment / Decrement //Increment / Decrement
stable_vector_iterator& operator++() BOOST_CONTAINER_NOEXCEPT stable_vector_iterator& operator++() BOOST_CONTAINER_NOEXCEPT
{ {
if(node_base_ptr_ptr p = this->m_pn->up){ node_base_ptr_ptr p(this->m_pn->up);
++p; this->m_pn = *(++p);
this->m_pn = node_ptr_traits::static_cast_from(*p);
}
return *this; return *this;
} }
@@ -302,10 +291,8 @@ class stable_vector_iterator
stable_vector_iterator& operator--() BOOST_CONTAINER_NOEXCEPT stable_vector_iterator& operator--() BOOST_CONTAINER_NOEXCEPT
{ {
if(node_base_ptr_ptr p = this->m_pn->up){ node_base_ptr_ptr p(this->m_pn->up);
--p; this->m_pn = *(--p);
this->m_pn = node_ptr_traits::static_cast_from(*p);
}
return *this; return *this;
} }
@@ -313,18 +300,11 @@ class stable_vector_iterator
{ stable_vector_iterator tmp(*this); --*this; return stable_vector_iterator(tmp); } { stable_vector_iterator tmp(*this); --*this; return stable_vector_iterator(tmp); }
reference operator[](difference_type off) const BOOST_CONTAINER_NOEXCEPT reference operator[](difference_type off) const BOOST_CONTAINER_NOEXCEPT
{ { return node_ptr_traits::static_cast_from(this->m_pn->up[off])->value; }
stable_vector_iterator tmp(*this);
tmp += off;
return *tmp;
}
stable_vector_iterator& operator+=(difference_type off) BOOST_CONTAINER_NOEXCEPT stable_vector_iterator& operator+=(difference_type off) BOOST_CONTAINER_NOEXCEPT
{ {
if(node_base_ptr_ptr p = this->m_pn->up){ if(off) this->m_pn = this->m_pn->up[off];
p += off;
this->m_pn = node_ptr_traits::static_cast_from(*p);
}
return *this; return *this;
} }
@@ -1757,11 +1737,8 @@ class stable_vector
return ret; return ret;
} }
node_ptr priv_get_end_node() const node_base_ptr priv_get_end_node() const
{ { return node_base_ptr_traits::pointer_to(const_cast<node_base_type&>(this->internal_data.end_node)); }
return node_ptr_traits::pointer_to
(static_cast<node_type&>(const_cast<node_base_type&>(this->internal_data.end_node)));
}
void priv_destroy_node(const node_type &n) void priv_destroy_node(const node_type &n)
{ {

View File

@@ -74,11 +74,8 @@ class vec_iterator
rebind_pointer<const value_type>::type rebind_pointer<const value_type>::type
, Pointer , Pointer
>::type pointer; >::type pointer;
typedef typename if_c typedef typename boost::intrusive::pointer_traits<Pointer> ptr_traits;
< IsConst typedef typename ptr_traits::reference reference;
, const value_type&
, value_type&
>::type reference;
#ifndef BOOST_CONTAINER_DOXYGEN_INVOKED #ifndef BOOST_CONTAINER_DOXYGEN_INVOKED
private: private: