aboutsummaryrefslogtreecommitdiff
path: root/gcc/builtins.c
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2020-05-27 22:08:15 +0100
committerJonathan Wakely <jwakely@redhat.com>2020-05-27 22:08:15 +0100
commit6c2582c0406250c66e2eb3651f8e8638796b7f53 (patch)
tree3a392876a1e7470675545fe94a6e58779c8d5048 /gcc/builtins.c
parent979e89a9a94f66241fa8355e2b2e8f4a680c83e1 (diff)
downloadgcc-6c2582c0406250c66e2eb3651f8e8638796b7f53.zip
gcc-6c2582c0406250c66e2eb3651f8e8638796b7f53.tar.gz
gcc-6c2582c0406250c66e2eb3651f8e8638796b7f53.tar.bz2
libstdc++: Fix view adaptors for mixed-const sentinels and iterators (PR 95322)
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.
Diffstat (limited to 'gcc/builtins.c')
0 files changed, 0 insertions, 0 deletions