[PATCH] libstdc++: implement LWG3662 basic_string::append/assign(NTBS, pos, n) suboptimal

Jonathan Wakely jwakely.gcc@gmail.com
Wed Jul 1 15:25:18 GMT 2026


On Wed, 1 Jul 2026, 16:19 Nathan Myers, <ncm@cantrip.org> wrote:

> On 7/1/26 11:08 AM, Jonathan Wakely wrote:
> > On Wed, 1 Jul 2026 at 15:47, Tomasz Kaminski <tkaminsk@redhat.com>
> wrote:
> >>
> >> Are the following checks correct? I think we need string of at least
> length __pos + __len.
> >
> > The macro is defined as:
> > #  define __glibcxx_requires_string_len(_String,_Len)    \
> >    _GLIBCXX_DEBUG_PEDASSERT(_String != 0 || _Len == 0)
> >
> > So it says we can't have a null pointer unless n==0 is true. I think
> > that's the right check here.
> >
> >
> >
> >> __glibcxx_requires_string_len(__s, __n);
>
>
> I was a little worried about
>
>    return assign(__sv_type(__s).substr(__pos, __n));
>
> It will scan all the way to the end of __s to make the string_view,
> and then only use __n of that. Shouldn't it limit the size of the
> string_view?
>

We find have strnlen in char_traits. This was discussed by lwg and is
mentioned in the issue.



> Maybe to __pos + __n; or even to __n and start it at __s + __pos
> if predconditions allow.
>

They don't.

Consider append("a\0b", 2, 1) which should throw out_of_range.



> >> On Wed, Jul 1, 2026 at 4:41 PM Yuao Ma <addr2line@gmail.com> wrote:
> >>>
> >>> Hi!
> >>>
> >>> This patch implements LWG3662 for C++11 ABI and COW ABI of strings.
> >>>
> >>> Tested on x86_64 linux, ok for trunk?
> >>>
> >>> Thanks,
> >>> Yuao
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20260701/eca8185a/attachment.htm>


More information about the Libstdc++ mailing list