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.

Reply via email to