Date
2023-02-01.20:48:23
Message id
13248

Content

Proposed resolution:

This wording is relative to N4917.

  1. Modify [range.iota.iterator] as indicated:

    namespace std::ranges {
      template<weakly_incrementable W, semiregular Bound>
        requires weakly-equality-comparable-with<W, Bound> && copyable<W>
      struct iota_view<W, Bound>::iterator {
      private:
        W value_ = W();             // exposition only
      public:
        […]
        friend constexpr iterator operator-(iterator i, difference_type n)
          requires advanceable<W>;
        friend constexpr difference_type operator-(const iterator& x, const iterator& y)
          requires advanceable<W> || sized_sentinel_for<W, W>;
      };
    }
    
    […]
    friend constexpr difference_type operator-(const iterator& x, const iterator& y)
      requires advanceable<W> || sized_sentinel_for<W, W>;
    

    -23- Effects: Equivalent to:

      using D = difference_type;
      if constexpr (is-integer-like<W>) {
        if constexpr (is-signed-integer-like<W>)
          return D(D(x.value_) - D(y.value_));
        else
          return (y.value_ > x.value_)
            ? D(-D(y.value_ - x.value_))
            : D(x.value_ - y.value_);
      } else {
        return x.value_ - y.value_;
      }