mirror of
https://github.com/boostorg/container.git
synced 2025-08-03 22:44:26 +02:00
Fixed unqualified iterator_to_pointer & to_raw_pointer calls that were causing compilation problems due to ADL.
This commit is contained in:
@@ -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;
|
||||||
|
@@ -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)
|
||||||
{
|
{
|
||||||
|
@@ -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:
|
||||||
|
Reference in New Issue
Block a user