[libcxx-commits] [PATCH] D105894: Revert "[libc++] NFCI: Remove code duplication and obsolete declarations in wrap_iter"

Bogdan Graur via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Tue Jul 13 08:08:30 PDT 2021


bgraur added a comment.

The reverted commit introduced an error when std::rel_ops are used.
Here's a small reproducer:

  #include <utility> // for std::rel_ops.
  #include <vector>
  
  using namespace std::rel_ops;
  
  struct T;
  void fn() {
    std::vector<T>::const_iterator a;
    for (std::vector<T>::const_iterator i; i >= a;)
      ;
  }

The compilation result:

  repro.cc:9:44: error: use of overloaded operator '>=' is ambiguous (with operand types 'std::vector<T>::const_iterator' (aka '__wrap_iter<const T *>') and 'std::vector<T>::const_iterator' (aka '__wrap_iter<const T *>'))
    for (std::vector<T>::const_iterator i; i >= a;)
                                           ~ ^  ~
  /google/src/cloud/bgraur/cherrypick/google3/third_party/crosstool/v18/llvm_unstable/toolchain/bin/../include/c++/v1/__utility/rel_ops.h:56:1: note: candidate function [with _Tp = std::__wrap_iter<const T *>]
  operator>=(const _Tp& __x, const _Tp& __y)
  ^
  /google/src/cloud/bgraur/cherrypick/google3/third_party/crosstool/v18/llvm_unstable/toolchain/bin/../include/c++/v1/__iterator/wrap_iter.h:201:6: note: candidate function [with _Iter1 = const T *, _Iter2 = const T *]
  bool operator>=(const __wrap_iter<_Iter1>& __x, const __wrap_iter<_Iter2>& __y) _NOEXCEPT
       ^
  1 error generated.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D105894/new/

https://reviews.llvm.org/D105894



More information about the libcxx-commits mailing list