3322. Add join_view::base() member function

Section: 25.7.14.2 [range.join.view] Status: Resolved Submitter: United States Opened: 2019-11-06 Last modified: 2020-11-09

Priority: 0

View all other issues in [range.join.view].

View all issues with Resolved status.

Discussion:

Addresses US 293

join_view is missing a base() member for returning the underlying view. All the other range adaptors provide this.

Proposed change:

To the join_view class template add the member:

constexpr V base() const { return base_; }

Jonathan Wakely:

The NB comment says "join_view is missing a base() member for returning the underlying view. All the other range adaptors provide this."

In fact, split_view and istream_view do not provide base() either. Of the views that do define base(), all except all_view do so out-of-line, so the proposed resolution adds it out-of-line too.

[2019-11 Status to Ready during Wednesday night issue processing in Belfast.]

[2019-12-16; Casey comments]

This issue has been resolved by P1456R1 "Move-only views", which added no less than two member functions named "base" to join_view.

Previous resolution [SUPERSEDED]:

This wording is relative to N4835.

  1. Modify 25.7.14.2 [range.join.view], class template join_view synopsis, as indicated:

    […]
    template<input_range R>
      requires viewable_range<R> && constructible_from<V, all_view<R>>
    constexpr explicit join_view(R&& r);
    
    constexpr V base() const;
    
    constexpr auto begin() {
      return iterator<simple-view<V>>{*this, ranges::begin(base_)};
    }
    […]
    
  2. Modify 25.7.14.2 [range.join.view] as indicated:

    template<input_range R>
      requires viewable_range<R> && constructible_from<V, all_view<R>>
    constexpr explicit join_view(R&& r);
    

    -2- Effects: […]

    constexpr V base() const;
    

    -?- Effects: Equivalent to: return base_;

[2020-11-09 Resolved for C++20. Status changed: Tentatively Resolved → Resolved.]

Proposed resolution:

Resolved by accepting P1456R1.