|
334 | 334 | namespace views { inline constexpr @\unspecnc@ join = @\unspecnc@; } // freestanding
|
335 | 335 |
|
336 | 336 | // \ref{range.join.with}, join with view
|
337 |
| - template<class R, class P> |
338 |
| - concept @\exposconcept{compatible-joinable-ranges}@ = @\seebelow@; // \expos |
339 |
| - |
340 | 337 | template<@\libconcept{input_range}@ V, @\libconcept{forward_range}@ Pattern>
|
341 |
| - requires @\libconcept{view}@<V> && @\libconcept{input_range}@<range_reference_t<V>> |
342 |
| - && @\libconcept{view}@<Pattern> |
343 |
| - && @\exposconcept{compatible-joinable-ranges}@<range_reference_t<V>, Pattern> |
| 338 | + requires @\seebelow@ |
344 | 339 | class join_with_view; // freestanding
|
345 | 340 |
|
346 | 341 | namespace views { inline constexpr @\unspecnc@ join_with = @\unspecnc@; } // freestanding
|
|
7023 | 7018 |
|
7024 | 7019 | \begin{codeblock}
|
7025 | 7020 | namespace std::ranges {
|
7026 |
| - template<class R, class P> |
7027 |
| - concept @\defexposconcept{compatible-joinable-ranges}@ = // \expos |
7028 |
| - @\libconcept{common_with}@<range_value_t<R>, range_value_t<P>> && |
7029 |
| - @\libconcept{common_reference_with}@<range_reference_t<R>, range_reference_t<P>> && |
7030 |
| - @\libconcept{common_reference_with}@<range_rvalue_reference_t<R>, range_rvalue_reference_t<P>>; |
7031 |
| - |
7032 | 7021 | template<class R>
|
7033 | 7022 | concept @\defexposconcept{bidirectional-common}@ = @\libconcept{bidirectional_range}@<R> && @\libconcept{common_range}@<R>; // \expos
|
7034 | 7023 |
|
7035 | 7024 | template<@\libconcept{input_range}@ V, @\libconcept{forward_range}@ Pattern>
|
7036 | 7025 | requires @\libconcept{view}@<V> && @\libconcept{input_range}@<range_reference_t<V>>
|
7037 | 7026 | && @\libconcept{view}@<Pattern>
|
7038 |
| - && @\exposconcept{compatible-joinable-ranges}@<range_reference_t<V>, Pattern> |
| 7027 | + && @\exposconcept{concatable}@<range_reference_t<V>, Pattern> |
7039 | 7028 | class join_with_view : public view_interface<join_with_view<V, Pattern>> {
|
7040 | 7029 | using @\exposid{InnerRng}@ = range_reference_t<V>; // \expos
|
7041 | 7030 |
|
|
7081 | 7070 | requires @\libconcept{forward_range}@<const V> &&
|
7082 | 7071 | @\libconcept{forward_range}@<const Pattern> &&
|
7083 | 7072 | is_reference_v<range_reference_t<const V>> &&
|
7084 |
| - @\libconcept{input_range}@<range_reference_t<const V>> { |
| 7073 | + @\libconcept{input_range}@<range_reference_t<const V>> && |
| 7074 | + @\exposconcept{concatable}@<range_reference_t<const V>, const Pattern> { |
7085 | 7075 | return @\exposid{iterator}@<true>{*this, ranges::begin(@\exposid{base_}@)};
|
7086 | 7076 | }
|
7087 | 7077 |
|
|
7096 | 7086 | constexpr auto end() const
|
7097 | 7087 | requires @\libconcept{forward_range}@<const V> && @\libconcept{forward_range}@<const Pattern> &&
|
7098 | 7088 | is_reference_v<range_reference_t<const V>> &&
|
7099 |
| - @\libconcept{input_range}@<range_reference_t<const V>> { |
| 7089 | + @\libconcept{input_range}@<range_reference_t<const V>> && |
| 7090 | + @\exposconcept{concatable}@<range_reference_t<const V>, const Pattern> { |
7100 | 7091 | using InnerConstRng = range_reference_t<const V>;
|
7101 | 7092 | if constexpr (@\libconcept{forward_range}@<InnerConstRng> &&
|
7102 | 7093 | @\libconcept{common_range}@<const V> && @\libconcept{common_range}@<InnerConstRng>)
|
|
7146 | 7137 | namespace std::ranges {
|
7147 | 7138 | template<@\libconcept{input_range}@ V, @\libconcept{forward_range}@ Pattern>
|
7148 | 7139 | requires @\libconcept{view}@<V> && @\libconcept{input_range}@<range_reference_t<V>>
|
7149 |
| - && @\libconcept{view}@<Pattern> && @\exposconcept{compatible-joinable-ranges}@<range_reference_t<V>, Pattern> |
| 7140 | + && @\libconcept{view}@<Pattern> && @\exposconcept{concatable}@<range_reference_t<V>, Pattern> |
7150 | 7141 | template<bool Const>
|
7151 | 7142 | class join_with_view<V, Pattern>::@\exposid{iterator}@ {
|
7152 | 7143 | using @\exposid{Parent}@ = @\exposid{maybe-const}@<Const, join_with_view>; // \expos
|
|
7553 | 7544 | namespace std::ranges {
|
7554 | 7545 | template<@\libconcept{input_range}@ V, @\libconcept{forward_range}@ Pattern>
|
7555 | 7546 | requires @\libconcept{view}@<V> && @\libconcept{input_range}@<range_reference_t<V>>
|
7556 |
| - && @\libconcept{view}@<Pattern> && @\exposconcept{compatible-joinable-ranges}@<range_reference_t<V>, Pattern> |
| 7547 | + && @\libconcept{view}@<Pattern> && @\exposconcept{concatable}@<range_reference_t<V>, Pattern> |
7557 | 7548 | template<bool Const>
|
7558 | 7549 | class join_with_view<V, Pattern>::@\exposid{sentinel}@ {
|
7559 | 7550 | using @\exposid{Parent}@ = @\exposid{maybe-const}@<Const, join_with_view>; // \expos
|
|
0 commit comments