The bug report is that transform_view's sentinel<false> cannot be compared to its iterator<true>. The comparison is supposed to use operator==(iterator<Const>, sentinel<Const>) after converting sentinel<false> to sentinel<true>. However, the operator== is a hidden friend so is not a candidate when comparing iterator<true> with sentinel<false>. The required conversion would only happen if we'd found the operator, but we can't find the operator until after the conversion happens. A new LWG issue has been reported, but not yet assigned a number. The solution suggested by Casey Carter is to make the hidden friends of the sentinel types work with iterators of any const-ness, so that no conversions are required. Patrick Palka observed that join_view has a similar problem and a similar fix is used for its sentinel. PR libstdc++/95322 * include/std/ranges (transform_view::_Sentinel): Allow hidden friends to work with _Iterator<true> and _Iterator<false>. (join_view::_Sentinel): Likewise. * testsuite/std/ranges/adaptors/95322.cc: New test. (cherry picked from commit 6c2582c0406250c66e2eb3651f8e8638796b7f53)
| 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... | |
| coroutine | 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... |