https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120415

--- Comment #10 from Jonathan Wakely <redi at gcc dot gnu.org> ---
There's a one-line fix:

  [[nodiscard]] constexpr friend difference_type operator-(const
TransformIterator& x, const TransformIterator& y)
+   requires std::sized_sentinel_for<Iterator, Iterator>
  {
   return x.it - y.it;
  }


This disables operator- for TransformIterator if the underlying iterator
doesn't support it, and that's enough to prevent the C++20 library trying to
use TransformIterator as a C++20 random access iterator.

Since this code attempts to be valid C++20 (e.g. it defines operator<=> for
Transformiterator) it REALLY needs to do this.

Ideally they should constrained ALL the operators on that adaptor.

Reply via email to