On Mon, Jul 14, 2025 at 12:11:18PM +0200, Tomasz Kaminski wrote:
> > +      if (__builtin_expect(__fwd, true))
> >
> We have a preference to use [[likely]] attribute when possible.

Ok, changed to
      if (__fwd) [[likely]]
in my copy.

> 
> > +       {
> > +         for (; __first != __last; ++__first, ++__result)
> > +           {
> > +             if constexpr (is_array_v<_Tp>)
> > +               std::relocate(std::begin(*__first), std::end(*__first),
> > +                             &(*__result)[0]);
> >
> We should use std::addressof or __builtin_addressof  here to avoid using
> operator& found by ADL.

Ok.  Which one though?  I see all of std::addressof, std::__addressof and
__builtin_addressof used heavily.

> The standard uses start_lifetime_as here (
> https://eel.is/c++draft/memory#obj.lifetime-18.3.1),

I know, but P2590R2 is not implemented yet and as written in
https://gcc.gnu.org/PR106658 I have actually no idea what needs to be done
if anything on the compiler side.  Because at least the GIMPLE model
basically allows placement new anywhere without anything in the IL marking
up that the dynamic type has changed.  Though perhaps for constant
expression evaluation we want something...

As for test, I'm certainly open to suggestions.

        Jakub

Reply via email to