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 >>> >>>
