[libcxx-commits] [PATCH] D101242: [libcxx][nfc] renames test iterator types to `legacy_*_iterator`

Christopher Di Bella via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Mon Apr 26 12:06:28 PDT 2021


cjdb added inline comments.


================
Comment at: libcxx/test/support/test_iterators.h:64
 public:
     typedef          std::input_iterator_tag                   iterator_category;
     typedef typename Traits::value_type                        value_type;
----------------
Quuxplusone wrote:
> @cjdb wrote:
> > tl;dr yes. At minimum, the iterator tags are now mandatory.
> 
> The existing iterators already have tags, though. So that's not a concern for us.
> 
> I suggested to Louis in chat but will put here for the record: If the main concern of this patch is to make sure we have a test iterator which is a "non-comparable input iterator" (comparable only to its sentinel type, but not to itself), then I suggest you leave everything the way it is in main but then add the new C++20-only, sentinel-comparison-only test iterator, like this:
> ```
> #if TEST_STD_VER >= 20
> template<class It>
> class incomparable_input_iterator {
>     // This is an input iterator according to C++>=20, but not according to C++<=17.
>     // It is comparable with its sentinel type, but not with its own type.
>     [...mostly the same stuff as the regular input iterator test type...]
> public:
>     struct sentinel {
>         constexpr explicit sentinel(It it) : it_(it) {}
>     };
>     friend constexpr bool operator==(const incomparable_input_iterator& x, const sentinel& y)
>         {return x.it_ == y.it_;}
> };
> #endif
> ```
> This probably belongs right above `contiguous_iterator`, circa line 315, because we intend it to be new in C++20.
>  If the main concern of this patch is to make sure we have a test iterator which is a "non-comparable input iterator" (comparable only to its sentinel type, but not to itself)

This isn't the only difference between //Cpp17InputIterator// and `std::input_iterator`.

> I suggest you leave everything the way it is in main but then add the new C++20-only, sentinel-comparison-only test iterator

That leaves ambiguity as to whether or not `input_iterator` refers to a //Cpp17InputIterator// or is a strict `std::input_iterator`. It needs to be renamed to clear up that ambiguity.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D101242



More information about the libcxx-commits mailing list