Date
2022-09-15.00:00:00
Message id
12698

Content

[ 2022-09-25; Hewill provides improved wording ]

This wording is relative to N4917.

  1. Modify [ranges.syn], header <ranges> synopsis, as indicated:

    namespace std::ranges {
      […]
    
      template<class R>
        concept has-tuplable-ref =            // exposition only
          move_constructible<range_reference_t<R>>;
    
      // [range.zip], zip view
      template<input_range... Views>
        requires (view<Views> && ...) && (sizeof...(Views) > 0) &&
                 (has-tuplable-ref<Views> && ...)
      class zip_view;
    
      […]
    
      // [range.adjacent], adjacent view
      template<forward_range V, size_t N>
        requires view<V> && (N > 0) && has-tuplable-ref<V>
      class adjacent_view;
    
      […]
    
      // [range.cartesian], cartesian product view
      template<input_range First, forward_range... Vs>
        requires (view<First> && ... && view<Vs>) &&
                 (has-tuplable-ref<First> && ... && has-tuplable-ref<Vs>)
      class cartesian_product_view;
    
      […]
    }
    
  2. Modify [range.zip.view] as indicated:

    namespace std::ranges {
      […]
      
      template<input_range... Views>
        requires (view<Views> && ...) && (sizeof...(Views) > 0) &&
                 (has-tuplable-ref<Views> && ...)
      class zip_view : public view_interface<zip_view<Views...>> {
        […]
      };
    }
    
  3. Modify [range.zip.iterator] as indicated:

    namespace std::ranges {
      […]
      template<input_range... Views>
        requires (view<Views> && ...) && (sizeof...(Views) > 0) &&
                 (has-tuplable-ref<Views> && ...)
      template<bool Const>
      class zip_view<Views...>::iterator {
        […]
      };
    }
    
  4. Modify [range.zip.sentinel] as indicated:

    namespace std::ranges {
      template<input_range... Views>
        requires (view<Views> && ...) && (sizeof...(Views) > 0) &&
                 (has-tuplable-ref<Views> && ...)
      template<bool Const>
      class zip_view<Views...>::sentinel {
        […]
      };
    }
    
  5. Modify [range.adjacent.view] as indicated:

    namespace std::ranges {
      template<forward_range V, size_t N>
        requires view<V> && (N > 0) && has-tuplable-ref<V>
      class adjacent_view : public view_interface<adjacent_view<V, N>> {
        […]
      };
    }
    
  6. Modify [range.adjacent.iterator] as indicated:

    namespace std::ranges {
      template<forward_range V, size_t N>
        requires view<V> && (N > 0) && has-tuplable-ref<V>
      template<bool Const>
      class adjacent_view<V, N>::iterator {
        […]
      };
    }
    
  7. Modify [range.adjacent.sentinel] as indicated:

    namespace std::ranges {
      template<forward_range V, size_t N>
        requires view<V> && (N > 0) && has-tuplable-ref<V>
      template<bool Const>
      class adjacent_view<V, N>::sentinel {
        […]
      };
    }
    
  8. Modify [range.cartesian.view] as indicated:

    namespace std::ranges {
      […]
      template<input_range First, forward_range... Vs>
        requires (view<First> && ... && view<Vs>) &&
                 (has-tuplable-ref<First> && ... && has-tuplable-ref<Vs>)
      class cartesian_product_view : public view_interface<cartesian_product_view<First, Vs...>> {
        […]
      };
    }
    
  9. Modify [range.cartesian.iterator] as indicated:

    namespace std::ranges {
      template<input_range First, forward_range... Vs>
        requires (view<First> && ... && view<Vs>) &&
                 (has-tuplable-ref<First> && ... && has-tuplable-ref<Vs>)
      template<bool Const>
      class cartesian_product_view<First, Vs...>::iterator {
        […]
      };
    }