On Sat, 21 Mar 2026, 13:36 François Dumont, <[email protected]> wrote:

> Still no chance to reproduce this problem.
>
> I think the patch is good and that you are simply missing it in the below
> build.
>
> The compiler is reporting the error coming from:
>
> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/
> string:238:   required from '__gnu_debug::basic_string<_CharT, _Traits,
> _Allocator>::basic_string(_InputIterator, _InputIterator, const
> _Allocator&) [with _InputIterator = int; _CharT = char; _Traits =
> std::char_traits<char>; _Allocator = std::allocator<char>]'
>
> Line 238 is the former line of the call
> to __glibcxx_check_valid_constructor_range(__begin, __end) that is leading
> to the error.
>
> After my patch it is on line 243.
>

Tomasz and I are both testing current trunk. If we're missing your patch,
then it means it hasn't been pushed to trunk.




François
>
>
> On 3/18/26 17:40, Tomasz Kaminski wrote:
>
>
>
> On Mon, Mar 9, 2026 at 12:04 PM Tomasz Kaminski <[email protected]>
> wrote:
>
>> I believe, this caused failure
>> 21_strings/basic_string/requirements/dr438/constructor.c in C++20 mode::
>> In file included from
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/
>> functions.h:39,
>>                  from
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/safe_
>> sequence.h:34,
>>                  from
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/
>> string:37,
>>                  from
>> /home/tkaminsk/src/gcc/libstdc++-v3/testsuite/21_strings/basic_string/requirements/dr438/
>> constructor.cc:23:
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/helper_functions.h:
>> In instantiation of 'constexpr bool __gnu_
>> debug::__valid_range(_InputIterator, _InputIterator) [with
>> _InputIterator = int]':
>>
> The full test suite showed 705 failures for _GLIBCXX_DEBUG=1 run, and
> every one I checked has the same error. They may be other, but are very
> hard to find.
> They are mostly point toward basic_regexp or basic_string.
> See the attachment for the full list.
>
> (The workaround seems far for useless currently).
>
>
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/
>> functions.h:65:   required from 'constexpr _InputIterator __gnu_
>> debug::__check_valid_range(const _InputIterator&, const _InputIterator&,
>> const char*, unsigned int, const char*) [with _InputIterator = int]'
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/
>> string:238:   required from '__gnu_debug::basic_string<_CharT, _Traits,
>> _Allocator>::basic_string(_InputIterator, _InputIterator, const
>> _Allocator&) [with _InputIterator = int; _CharT = char; _Traits =
>> std::char_traits<char>; _Allocator = std::allocator<char>]'
>>
>> /home/tkaminsk/src/gcc/libstdc++-v3/testsuite/21_strings/basic_string/requirements/dr438/
>> constructor.cc:28:   required from here
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/helper_
>> functions.h:212: error: no matching function for call to
>> '__iterator_category(int&)'
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/helper_
>> functions.h:212: note: there is 1 candidate
>> In file included from
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_
>> construct.h:61,
>>                  from
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/char_
>> traits.h:59,
>>                  from
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/
>> string:45,
>>                  from
>> /home/tkaminsk/src/gcc/libstdc++-v3/testsuite/21_strings/basic_string/requirements/dr438/
>> constructor.cc:22:
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_iterator_base_
>> types.h:241: note: candidate 1: 'template<class _Iter> constexpr
>> typename std::iterator_traits<_Iterator>::iterator_category
>> std::__iterator_category(const _Iter&)'
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_iterator_base_
>> types.h:241: note: template argument deduction/substitution failed:
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_iterator_base_types.h:
>> In substitution of 'template<class _Iter> constexpr typename
>> std::iterator_traits<_Iterator>::iterator_category
>> std::__iterator_category(const _Iter&) [with _Iter = int]':
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/helper_
>> functions.h:212:   required from 'constexpr bool __gnu_
>> debug::__valid_range(_InputIterator, _InputIterator) [with
>> _InputIterator = int]'
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/
>> functions.h:65:   required from 'constexpr _InputIterator __gnu_
>> debug::__check_valid_range(const _InputIterator&, const _InputIterator&,
>> const char*, unsigned int, const char*) [with _InputIterator = int]'
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/
>> string:238:   required from '__gnu_debug::basic_string<_CharT, _Traits,
>> _Allocator>::basic_string(_InputIterator, _InputIterator, const
>> _Allocator&) [with _InputIterator = int; _CharT = char; _Traits =
>> std::char_traits<char>; _Allocator = std::allocator<char>]'
>>
>> /home/tkaminsk/src/gcc/libstdc++-v3/testsuite/21_strings/basic_string/requirements/dr438/
>> constructor.cc:28:   required from here
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_iterator_base_
>> types.h:241: error: no type named 'iterator_category' in 'struct
>> std::iterator_traits<int>'
>> compiler exited with status 1
>> FAIL: 21_strings/basic_string/requirements/dr438/constructor.cc
>>  -std=gnu++20 (test for excess errors)
>> Excess errors:
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/debug/helper_
>> functions.h:212: error: no matching function for call to
>> '__iterator_category(int&)'
>>
>> /home/tkaminsk/build/gcc/16/x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_iterator_base_
>> types.h:241: error: no type named 'iterator_category' in 'struct
>> std::iterator_traits<int>'
>>
>>
>> On Mon, Mar 2, 2026 at 7:00 AM François Dumont <[email protected]>
>> wrote:
>>
>>> Hi
>>>
>>>      libstdc++: [_GLIBCXX_DEBUG][__cplusplus >= 201103L] Remove useless
>>> workaround
>>>
>>>      Starting with C++11 we leverage on template parameter requirement
>>> to prevent
>>>      instantiation of methods taking iterators with invalid types.
>>>      So the _GLIBCXX_DEBUG mode do not need to check for potential
>>> ambiguity between
>>>      integer type and iterator type anymore.
>>>
>>>      libstdc++-v3/ChangeLog:
>>>
>>>              * include/debug/functions.h
>>>              [__cplusplus >= 201103L](__foreign_iterator_aux): Remove.
>>>              [__cplusplus >= 201103L](__foreign_iterator): Adapt to use
>>> __foreign_iterator_aux2.
>>>              * include/debug/helper_functions.h
>>>              [__cplusplus >= 201103L]: Remove include
>>> bits/cpp_type_traits.h.
>>>              [__cplusplus >= 201103L](_Distance_traits<_Integral,
>>> std::__true_type>): Remove.
>>>              [__cplusplus >= 201103L](__valid_range_aux(_Integral,
>>> _Integral, std::__true_type)):
>>>              Remove.
>>>              [__cplusplus >= 201103L](__valid_range_aux(_Iterator,
>>> _Iterator, std::__false_type)):
>>>              Remove.
>>>              [__cplusplus >= 201103L]
>>>              (__valid_range_aux(_Integral, _Integral,
>>> _Distance_traits<_Integral>::__type&,
>>>              std::__true_type)): Remove.
>>>              [__cplusplus >= 201103L]
>>>              (__valid_range_aux(_Iterator, _Iterator,
>>> _Distance_traits<_Iterator>::__type&,
>>>              std::__false_type)): Remove.
>>>              [__cplusplus >= 201103L](__valid_range(_Iterator,
>>> _Iterator)): Adapt.
>>>              [__cplusplus >= 201103L]
>>>              (__valid_range(_Iterator, _Iterator,
>>> _Distance_traits<_Iterator>::__type&)): Adapt.
>>>
>>> Tested under Linux x64 _GLIBCXX_DEBUG mode.
>>>
>>> Ok to commit ?
>>>
>>> François
>>>
>>>

Reply via email to