On 21/10/2024 06:56, François Dumont wrote:


On 17/10/2024 23:11, Jonathan Wakely wrote:


On Thu, 17 Oct 2024 at 21:39, Jonathan Wakely <jwakely....@gmail.com> wrote:



    On Thu, 17 Oct 2024 at 20:52, François Dumont
    <frs.dum...@gmail.com> wrote:

        Here is an updated version that compiles, I think, all your
        feedbacks. It's much cleaner indeed.


    Thanks, I'll take a look tomorrow.

        It's also tested in C++98/17/23.

        I'm surprised that we do not need to consider potential
        allocator::const_pointer.

    Do you mean consider the case where Alloc::const_pointer is not
    the same type as rebinding 'pointer' to a const element type?

Yes, exactly.



    We don't need to consider that because we never get a
    'const_pointer' from the allocator, and we never need to pass a
    'const_pointer' to the allocator. The allocator's 'allocate' and
    'deallocate' members both work with the 'pointer' type, so we
    only need to use that type when interacting with the allocator.
    For all the other uses, such as _Const_Node_ptr, what we need is
    a pointer-to-const that's compatible with the allocator's pointer
    type. It doesn't actually matter if it's the same type as
    allocator_traits<Alloc>::const_pointer, because we don't need


Sorry, I sent the email before finishing that thought!

... we don't need to pass a const_pointer to anything, we only need it for the container's own purposes.

But thinking about it some more, do we even need a const-pointer for the container?  Currently the const_iterator stores a const-pointer, and some members like _M_root() and _M_leftmost() return a const-pointer. But they don't need to. The nodes are all pointed to by a non-const _Base_ptr, none of the storage managed by the container is const.

Except _M_impl._M_header in a const context.

Using const_cast would result in a similar UB that you fixed on _GLIBCXX_DEBUG containers, no ?

I can provide a version with the const_cast but I'm not sure it worth it.

François

Reply via email to