[libcxx-commits] [PATCH] D103335: [libcxx][ranges] Adds `common_iterator`.

Tim Song via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Wed Jul 14 11:45:51 PDT 2021


tcanens added inline comments.


================
Comment at: libcxx/include/__iterator/common_iterator.h:169
+
+    if (__x_index == __y_index)
+      return true;
----------------
zoecarver wrote:
> ldionne wrote:
> > How is this behavior really what we want? IIUC, that means that if you compare two `common_iterators` that both contain different iterators (say `It1` and `It2`) that are not comparable to each other, the `common_iterator`s will compare equal to each other even if `It1` and `It2` are "pointing" to entirely different elements. Am I misunderstanding something here, or that's an incredibly subtle (and broken) behavior to have at runtime? @tcanens Can you shed some light on this?
> > 
> > In all cases, we need a test where we exercise that.
> We should assert these aren't both zero, even though it's non-conforming, people will thank us.
This is meant for C++20 input iterators that aren't comparable with each other. Because incrementing an input iterator invalidates all copies, you can't have two valid iterators pointing to different elements in the same range. 

> We should assert these aren't both zero, even though it's non-conforming, people will thank us.

Please don't. `i == i` had better work.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D103335



More information about the libcxx-commits mailing list