4.9 KiB
[range.join.view]
25 Ranges library [ranges]
25.7 Range adaptors [range.adaptors]
25.7.14 Join view [range.join]
25.7.14.2 Class template join_view [range.join.view]
namespace std::ranges {template<input_range V>requires view && input_range<range_reference_t>class join_view : public view_interface<join_view> {private:using InnerRng = range_reference_t; // exposition only// [range.join.iterator], class template join_view::iteratortemplatestruct iterator; // exposition only// [range.join.sentinel], class template join_view::sentineltemplatestruct sentinel; // exposition only V base_ = V(); // exposition only**non-propagating-cache<iterator_t> outer_; // exposition only, present only// when non-propagating-cache<remove_cv_t<InnerRng>> inner_; // exposition only, present only// if is_reference_v<InnerRng> is falsepublic: join_view() requires default_initializable = default; constexpr explicit join_view(V base); constexpr V base() const & requires copy_constructible { return base_; }constexpr V base() && { return std::move(base_); }constexpr auto begin() {if constexpr (forward_range) {constexpr bool use_const = simple-view && is_reference_v<InnerRng>; return iterator<use_const>{*this, ranges::begin(base_)}; } else {outer_ = ranges::begin(base_); return iterator{*this}; }}constexpr auto begin() constrequires forward_range && is_reference_v<range_reference_t> &&input_range<range_reference_t>{ return iterator{*this, ranges::begin(base_)}; }constexpr auto end() {if constexpr (forward_range && is_reference_v<InnerRng> && forward_range<InnerRng> &&common_range && common_range<InnerRng>)return iterator<simple-view>{*this, ranges::end(base_)}; elsereturn sentinel<simple-view>{*this}; }constexpr auto end() constrequires forward_range && is_reference_v<range_reference_t> &&input_range<range_reference_t> {if constexpr (forward_range<range_reference_t> &&common_range &&common_range<range_reference_t>)return iterator{*this, ranges::end(base_)}; elsereturn sentinel{*this}; }}; templateexplicit join_view(R&&) -> join_view<views::all_t>;}
constexpr explicit join_view(V base);
Effects: Initializes base_ with std::move(base).