On Sat, 14 Dec 2024 at 14:59, Jonathan Wakely <jwakely....@gmail.com> wrote:
>
>
>
> On Mon, 9 Dec 2024, 06:05 François Dumont, <frs.dum...@gmail.com> wrote:
>>
>>
>> On 04/12/2024 22:48, Jonathan Wakely wrote:
>> > On 04/12/24 19:27 +0100, François Dumont wrote:
>> >> Hi
>> >>
>> >> I've completed the synchronization with your equivalent PR for
>> >> std::list so here is the updated patch.
>> >>
>> >> PR updated a couple of days ago.
>> >>
>> >> Note that I've started to rework the patch for the same in _Hashtable.
>> >
>> > Great, thanks.
>> >
>> >>
>> >> #if __cplusplus < 201103L
>> >>       void
>> >> -      _M_construct_node(_Link_type __node, const value_type& __x)
>> >> +      _M_construct_node(_Base_ptr __p, const value_type& __x)
>> >
>> > And can this be left as _Node_ptr instead of changed to _Base_ptr?
>> > Then it wouldn't need the static_cast, and the callers wouldn't need
>> > to use _M_base_ptr().
>> >
>> > Logically, it has to be a _Node_ptr or the cast isn't valid anyway.
>> >
>> > There seem to be several places like this where we're giving up
>> > valuable type information by using _base_ptr instead of _Node_ptr.
>> >
>> > Is that really necessary? If we have a _Node_ptr we can always get a
>> > _Base_ptr easily by calling _M_base_ptr().
>> >
>> > Is it a constness thing, because _M_begin() const was changed to
>> > return _Base_ptr instead of _Const_link_ptr?
>> >
>> No, just me being lazy and considering that as we store _Base_ptr we can
>> also use it everywhere.
>>
>> In this new version I've preserved _Node_ptr almost everywhere.
>>
>> But _M_begin() is still returning a _Base_ptr and I've introduced
>> _M_begin_node() for rare occasions when a _Node_ptr is needed.
>>
>> Note that I've hesitated to add a _S_nullptr() to get a _Base_ptr null
>> pointer. Is default constructor on fancy pointer type mandatory ?
>
>
> Yes, but default construction can give a singular value (like an 
> uninitialized int*) so you want to use value initialization.
>
> So:
>
> pointer p = pointer();
>
> Or in C++11:
> pointer p{};
>
> And not just:
> pointer p;
>
>
>> I fear
>> that only constructor from nullptr is mandatory.
>
>
> Value init is required to work by the Cpp17NullablePointer requirements.

See https://en.cppreference.com/w/cpp/named_req/NullablePointer for
the cppreference.com version of those requirements.


>
>
>>
>> I've forced push on:
>>
>> https://forge.sourceware.org/gcc/gcc-TEST/pulls/27
>
>
> Thanks, I'll take another look.
>
>

Reply via email to