Skip to content

Commit 686149e

Browse files
burblebeetkoeppe
authored andcommitted
LWG4074 compatible-joinable-ranges is underconstrained
1 parent 66eee9f commit 686149e

File tree

1 file changed

+8
-17
lines changed

1 file changed

+8
-17
lines changed

source/ranges.tex

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -334,13 +334,8 @@
334334
namespace views { inline constexpr @\unspecnc@ join = @\unspecnc@; } // freestanding
335335

336336
// \ref{range.join.with}, join with view
337-
template<class R, class P>
338-
concept @\exposconcept{compatible-joinable-ranges}@ = @\seebelow@; // \expos
339-
340337
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@
344339
class join_with_view; // freestanding
345340

346341
namespace views { inline constexpr @\unspecnc@ join_with = @\unspecnc@; } // freestanding
@@ -7023,19 +7018,13 @@
70237018

70247019
\begin{codeblock}
70257020
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-
70327021
template<class R>
70337022
concept @\defexposconcept{bidirectional-common}@ = @\libconcept{bidirectional_range}@<R> && @\libconcept{common_range}@<R>; // \expos
70347023

70357024
template<@\libconcept{input_range}@ V, @\libconcept{forward_range}@ Pattern>
70367025
requires @\libconcept{view}@<V> && @\libconcept{input_range}@<range_reference_t<V>>
70377026
&& @\libconcept{view}@<Pattern>
7038-
&& @\exposconcept{compatible-joinable-ranges}@<range_reference_t<V>, Pattern>
7027+
&& @\exposconcept{concatable}@<range_reference_t<V>, Pattern>
70397028
class join_with_view : public view_interface<join_with_view<V, Pattern>> {
70407029
using @\exposid{InnerRng}@ = range_reference_t<V>; // \expos
70417030

@@ -7081,7 +7070,8 @@
70817070
requires @\libconcept{forward_range}@<const V> &&
70827071
@\libconcept{forward_range}@<const Pattern> &&
70837072
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> {
70857075
return @\exposid{iterator}@<true>{*this, ranges::begin(@\exposid{base_}@)};
70867076
}
70877077

@@ -7096,7 +7086,8 @@
70967086
constexpr auto end() const
70977087
requires @\libconcept{forward_range}@<const V> && @\libconcept{forward_range}@<const Pattern> &&
70987088
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> {
71007091
using InnerConstRng = range_reference_t<const V>;
71017092
if constexpr (@\libconcept{forward_range}@<InnerConstRng> &&
71027093
@\libconcept{common_range}@<const V> && @\libconcept{common_range}@<InnerConstRng>)
@@ -7146,7 +7137,7 @@
71467137
namespace std::ranges {
71477138
template<@\libconcept{input_range}@ V, @\libconcept{forward_range}@ Pattern>
71487139
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>
71507141
template<bool Const>
71517142
class join_with_view<V, Pattern>::@\exposid{iterator}@ {
71527143
using @\exposid{Parent}@ = @\exposid{maybe-const}@<Const, join_with_view>; // \expos
@@ -7553,7 +7544,7 @@
75537544
namespace std::ranges {
75547545
template<@\libconcept{input_range}@ V, @\libconcept{forward_range}@ Pattern>
75557546
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>
75577548
template<bool Const>
75587549
class join_with_view<V, Pattern>::@\exposid{sentinel}@ {
75597550
using @\exposid{Parent}@ = @\exposid{maybe-const}@<Const, join_with_view>; // \expos

0 commit comments

Comments
 (0)