The __iota_diff_t alias can be the type __int128, but that does not satisfy the signed_integral and __is_signed_integer_like concepts when __STRICT_ANSI__ is defined (which is true for -std=c++2a). Because weakly_incrementable is defined in terms of signed_integral, it is not satisfied by __int128, which means iota_view's iterator doesn't always satisfy input_or_output_iterator and so iota_view is not always a range. The solution is to define __max_size_type and __max_diff_type using __int128, so that __is_signed_integer_like allows __int128, and then make weakly_incrementable use __is_signed_integer_like instead of signed_integral. PR libstdc++/93267 * include/bits/iterator_concepts.h (__max_diff_type, __max_size_type): Move here from <bits/range_access.h> and define using __int128 when available. (__is_integer_like, __is_signed_integer_like): Move here from <bits/range_access.h>. (weakly_incrementable): Use __is_signed_integer_like. * include/bits/range_access.h (__max_diff_type, __max_size_type) (__is_integer_like, __is_signed_integer_like): Move to <bits/iterator_concepts.h>. (__make_unsigned_like_t): Move here from <ranges>. * include/std/ranges (__make_unsigned_like_t): Move to <bits/range_access.h>. (iota_view): Replace using-directive with using-declarations. * testsuite/std/ranges/iota/93267.cc: New test. * testsuite/std/ranges/iota_view.cc: Move to new 'iota' sub-directory.
| Name |
Last commit
|
Last update |
|---|---|---|
| .. | ||
| algorithm | Loading commit data... | |
| any | Loading commit data... | |
| array | Loading commit data... | |
| atomic | Loading commit data... | |
| bit | Loading commit data... | |
| bitset | Loading commit data... | |
| charconv | Loading commit data... | |
| chrono | Loading commit data... | |
| codecvt | Loading commit data... | |
| complex | Loading commit data... | |
| concepts | Loading commit data... | |
| condition_variable | Loading commit data... | |
| deque | Loading commit data... | |
| execution | Loading commit data... | |
| filesystem | Loading commit data... | |
| forward_list | Loading commit data... | |
| fstream | Loading commit data... | |
| functional | Loading commit data... | |
| future | Loading commit data... | |
| iomanip | Loading commit data... | |
| ios | Loading commit data... | |
| iosfwd | Loading commit data... | |
| iostream | Loading commit data... | |
| istream | Loading commit data... | |
| iterator | Loading commit data... | |
| limits | Loading commit data... | |
| list | Loading commit data... | |
| locale | Loading commit data... | |
| map | Loading commit data... | |
| memory | Loading commit data... | |
| memory_resource | Loading commit data... | |
| mutex | Loading commit data... | |
| numbers | Loading commit data... | |
| numeric | Loading commit data... | |
| optional | Loading commit data... | |
| ostream | Loading commit data... | |
| queue | Loading commit data... | |
| random | Loading commit data... | |
| ranges | Loading commit data... | |
| ratio | Loading commit data... | |
| regex | Loading commit data... | |
| scoped_allocator | Loading commit data... | |
| set | Loading commit data... | |
| shared_mutex | Loading commit data... | |
| span | Loading commit data... | |
| sstream | Loading commit data... | |
| stack | Loading commit data... | |
| stdexcept | Loading commit data... | |
| stop_token | Loading commit data... | |
| streambuf | Loading commit data... | |
| string | Loading commit data... | |
| string_view | Loading commit data... | |
| system_error | Loading commit data... | |
| thread | Loading commit data... | |
| tuple | Loading commit data... | |
| type_traits | Loading commit data... | |
| typeindex | Loading commit data... | |
| unordered_map | Loading commit data... | |
| unordered_set | Loading commit data... | |
| utility | Loading commit data... | |
| valarray | Loading commit data... | |
| variant | Loading commit data... | |
| vector | Loading commit data... | |
| version | Loading commit data... |