Gentle reminder, any chance to review it ?
On 6/15/26 07:07, François Dumont wrote:
Hi
libstdc++: [_GLIBCXX_DEBUG] Improve COW basic_string checks
Put the __glibcxx_requires_valid_range checks at public member level
so that diagnostics are giving directly the invoked member name.
Add the std::_RequireInputIter constraints on members taking template
iterator range to avoid the "do the right thing" ambiguity without
the help of __is_integer.
libstdc++v3/ChangeLog:
* include/bits/cow_string.h
(basic_string::_M_replace): New.
(basic_string(_InputIterator, _InputIterator, const
_Alloc&): Add
std::_RequireInputIter constraint and
__glibcxx_requires_valid_constructor_range
check.
(basic_string::append(_InputIte, _InputIte): Add
std::_RequireInputIter
constraint and __glibcxx_requires_valid_range check. Call
_M_replace.
(basic_string::assign(_InputIte, _InputIte): Likewise.
(basic_string::insert(iterator, _InputIte, _InputIte)):
Likewise.
(basic_string::replace(iterator, iterator, _InputIte,
_InputIte)): Likewise.
[__cplusplus >= 201103L](basic_string::_S_construct): New.
(basic_string::_M_replace_dispatch(iterator, iterator,
_InputIte, _InputIte,
__false_type)): Remove __glibcxx_requires_valid_range check.
* include/debug/debug.h
(__glibcxx_requires_valid_constructor_range): New.
Tested under Linux x86_64 with _GLIBCXX_USE_CXX11_ABI=0 and
_GLIBCXX_DEBUG.
Note that there is a double requires-valid-range check when _M_replace
is being called because of the temporary basic_string instantiation.
Ok to commit ?
François