$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: [boost] [STL + allocators] Bug?
From: Phil Bouchard (philippeb8_at_[hidden])
Date: 2016-02-17 13:17:47
This is about STL containers and allocators.  It looks like a mistake in 
the STL containers but I don't think there is any possible workarounds 
if the Boost library is based on it.
When I look at the code of GCC's std::list:
   template<typename _Tp, typename _Alloc>
     void
     _List_base<_Tp, _Alloc>::
     _M_clear()
     {
       typedef _List_node<_Tp>  _Node;
       _Node* __cur = static_cast<_Node*>(_M_impl._M_node._M_next);
       while (__cur != &_M_impl._M_node)
        {
          _Node* __tmp = __cur;
          __cur = static_cast<_Node*>(__cur->_M_next);
#if __cplusplus >= 201103L
          _M_get_Node_allocator().destroy(__tmp);
#else
          _M_get_Tp_allocator().destroy(std::__addressof(__tmp->_M_data));
#endif
          _M_put_node(__tmp);
        }
     }
I think it should make use of the allocator's specific pointer as such:
   template<typename _Tp, typename _Alloc>
     void
     _List_base<_Tp, _Alloc>::
     _M_clear()
     {
       typedef _List_node<_Tp>  _Node;
       typedef typename _Alloc::rebind<_Node>::other::pointer _NodePtr;
       _NodePtr __cur = static_cast<_NodePtr>(_M_impl._M_node._M_next);
       while (__cur != &_M_impl._M_node)
        {
          _NodePtr __tmp = __cur;
          __cur = static_cast<_NodePtr>(__cur->_M_next);
#if __cplusplus >= 201103L
          _M_get_Node_allocator().destroy(__tmp);
#else
          _M_get_Tp_allocator().destroy(std::__addressof(__tmp->_M_data));
#endif
          _M_put_node(__tmp);
        }
     }
Meanwhile I don't think there is any workaround possible for this for 
use of an allocator with specific pointer in Boost?