https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57272
--- Comment #9 from GCC Commits <cvs-commit at gcc dot gnu.org> --- The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>: https://gcc.gnu.org/g:84b40a1c1b2c9e3feb546838fa988d653eed0755 commit r15-5910-g84b40a1c1b2c9e3feb546838fa988d653eed0755 Author: Jonathan Wakely <jwak...@redhat.com> Date: Fri Nov 15 21:45:16 2024 +0000 libstdc++: Add fancy pointer support to std::forward_list [PR57272] This takes a very similar approach to the changes for std::list. libstdc++-v3/ChangeLog: PR libstdc++/57272 * include/bits/forward_list.h (_GLIBCXX_USE_ALLOC_PTR_FOR_LIST): Define. (_Fwd_list_node_base::_M_base_ptr): New member functions. (_Fwd_list_node::_M_node_ptr): New member function. (_Fwd_list_iterator, _Fwd_list_const_iterator): Make internal member functions and data member private. Declare forward_list and _Fwd_list_base as friends. (__fwdlist::_Node_base, __fwdlist::_Node, __fwdlist::_Iterator): New class templates. (__fwdlist::_Node_traits): New class template. (_Fwd_list_base): Use _Node_traits to get types. Use _Base_ptr instad of _Fwd_list_node_base*. Use _M_base_ptr() instead of taking address of head node. (forward_list): Likewise. (_Fwd_list_base::_M_get_node): Do not define for versioned namespace. (_Fwd_list_base::_M_put_node): Only convert pointer if needed. (_Fwd_list_base::_M_create_node): Use __allocate_guarded_obj. (_Fwd_list_base::_M_destroy_node): New member function. * include/bits/forward_list.tcc (_Fwd_list_base::_M_insert_after) (forward_list::_M_splice_after, forward_list::insert_after): Use const_iterator::_M_const_cast() instead of casting pointers. (_Fwd_list_base::_M_erase_after): Use _M_destroy_node. (forward_list::remove, forward_list::remove_if): Only do downcasts when accessing the value. (forward_list::sort): Likewise. * testsuite/23_containers/forward_list/capacity/1.cc: Check max_size for new node type. * testsuite/23_containers/forward_list/capacity/node_sizes.cc: New test. * testsuite/23_containers/forward_list/requirements/explicit_instantiation/alloc_ptr.cc: New test. * testsuite/23_containers/forward_list/requirements/explicit_instantiation/alloc_ptr_ignored.cc: New test.