[libcxx-commits] [PATCH] D128864: [libc++] Fix algorithms which use reverse_iterator
Konstantin Varlamov via Phabricator via libcxx-commits
libcxx-commits at lists.llvm.org
Thu Jul 21 01:28:15 PDT 2022
var-const added inline comments.
================
Comment at: libcxx/include/__iterator/reverse_iterator.h:211
#if _LIBCPP_STD_VER > 17
requires requires {
{ __x.base() == __y.base() } -> convertible_to<bool>;
----------------
If we're doing essentially a workaround, would it be possible/easier to instead define an internal comparator for reverse iterators and use it in the affected algorithms?
```
bool __reverse_iter_eq(const reverse_iterator<_Iter1>& __x, const reverse_iterator<_Iter2>& __y) {
return __x.base() == __y.base();
}
// In the algorithm
for (; !std::__reverse_iter_eq(__first, __last); ++__first) {
```
================
Comment at: libcxx/include/__iterator/reverse_iterator.h:429
+ _LIBCPP_HIDE_FROM_ABI friend constexpr bool operator==(const _AlgRevIter& __lhs, const _AlgRevIter& __rhs) {
+ return __lhs.base() == __rhs.base();
+ }
----------------
Hmm, so this expression is not ambiguous, but when it's used as a constraint in a `requires` clause, it is considered ambiguous? Am I missing something?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D128864/new/
https://reviews.llvm.org/D128864
More information about the libcxx-commits
mailing list