Skip to content

Commit 1b9110c

Browse files
burblebeetkoeppe
authored andcommitted
LWG3406 elements_view::begin() and elements_view::end() have incompatible constraints
1 parent b768bbc commit 1b9110c

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

source/ranges.tex

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6294,13 +6294,13 @@
62946294
constexpr auto begin() requires (!@\exposconcept{simple-view}@<V>)
62956295
{ return @\exposid{iterator}@<false>(ranges::begin(@\exposid{base_}@)); }
62966296

6297-
constexpr auto begin() const requires @\exposconcept{simple-view}@<V>
6297+
constexpr auto begin() const requires @\libconcept{range}@<const V>
62986298
{ return @\exposid{iterator}@<true>(ranges::begin(@\exposid{base_}@)); }
62996299

6300-
constexpr auto end()
6300+
constexpr auto end() requires (!@\exposconcept{simple-view}@<V> && !common_range<V>)
63016301
{ return @\exposid{sentinel}@<false>{ranges::end(@\exposid{base_}@)}; }
63026302

6303-
constexpr auto end() requires common_range<V>
6303+
constexpr auto end() requires (!@\exposconcept{simple-view}@<V> && common_range<V>)
63046304
{ return @\exposid{iterator}@<false>{ranges::end(@\exposid{base_}@)}; }
63056305

63066306
constexpr auto end() const requires range<const V>
@@ -6700,15 +6700,19 @@
67006700

67016701
constexpr sentinel_t<@\exposid{Base}@> base() const;
67026702

6703-
friend constexpr bool operator==(const @\exposid{iterator}@<Const>& x, const @\exposid{sentinel}@& y);
6703+
template<bool OtherConst>
6704+
requires @\libconcept{sentinel_for}@<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{maybe-const}@<OtherConst, V>>>
6705+
friend constexpr bool operator==(const @\exposid{iterator}@<OtherConst>& x, const @\exposid{sentinel}@& y);
67046706

6707+
template<bool OtherConst>
6708+
requires @\libconcept{sized_sentinel_for}@<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{maybe-const}@<OtherConst, V>>>
67056709
friend constexpr range_difference_t<@\exposid{Base}@>
6706-
operator-(const @\exposid{iterator}@<Const>& x, const @\exposid{sentinel}@& y)
6707-
requires sized_sentinel_for<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{Base}@>>;
6710+
operator-(const @\exposid{iterator}@<OtherConst>& x, const @\exposid{sentinel}@& y);
67086711

6709-
friend constexpr range_difference_t<@\exposid{Base}@>
6710-
operator-(const @\exposid{sentinel}@& x, const @\exposid{iterator}@<Const>& y)
6711-
requires sized_sentinel_for<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{Base}@>>;
6712+
template<bool OtherConst>
6713+
requires @\libconcept{sized_sentinel_for}@<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{maybe-const}@<OtherConst, V>>>
6714+
friend constexpr range_difference_t<@\exposid{maybe-const}@<OtherConst, V>>
6715+
operator-(const @\exposid{sentinel}@& x, const @\exposid{iterator}@<OtherConst>& y);
67126716
};
67136717
}
67146718
\end{codeblock}
@@ -6749,7 +6753,9 @@
67496753

67506754
\indexlibrarymember{operator==}{elements_view::sentinel}%
67516755
\begin{itemdecl}
6752-
friend constexpr bool operator==(const @\exposid{iterator}@<Const>& x, const @\exposid{sentinel}@& y);
6756+
template<bool OtherConst>
6757+
requires @\libconcept{sentinel_for}@<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{maybe-const}@<OtherConst, V>>>
6758+
friend constexpr bool operator==(const @\exposid{iterator}@<OtherConst>& x, const @\exposid{sentinel}@& y);
67536759
\end{itemdecl}
67546760

67556761
\begin{itemdescr}
@@ -6760,9 +6766,10 @@
67606766

67616767
\indexlibrarymember{operator-}{elements_view::sentinel}%
67626768
\begin{itemdecl}
6769+
template<bool OtherConst>
6770+
requires @\libconcept{sized_sentinel_for}@<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{maybe-const}@<OtherConst, V>>>
67636771
friend constexpr range_difference_t<@\exposid{Base}@>
6764-
operator-(const @\exposid{iterator}@<Const>& x, const @\exposid{sentinel}@& y)
6765-
requires sized_sentinel_for<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{Base}@>>;
6772+
operator-(const @\exposid{iterator}@<OtherConst>& x, const @\exposid{sentinel}@& y);
67666773
\end{itemdecl}
67676774

67686775
\begin{itemdescr}
@@ -6773,9 +6780,10 @@
67736780

67746781
\indexlibrarymember{operator-}{elements_view::sentinel}%
67756782
\begin{itemdecl}
6776-
friend constexpr range_difference_t<@\exposid{Base}@>
6777-
operator-(const @\exposid{sentinel}@& x, const @\exposid{iterator}@<Const>& y)
6778-
requires sized_sentinel_for<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{Base}@>>;
6783+
template<bool OtherConst>
6784+
requires @\libconcept{sized_sentinel_for}@<sentinel_t<@\exposid{Base}@>, iterator_t<@\exposid{maybe-const}@<OtherConst, V>>>
6785+
friend constexpr range_difference_t<@\exposid{maybe-const}@<OtherConst, V>>
6786+
operator-(const @\exposid{sentinel}@& x, const @\exposid{iterator}@<OtherConst>& y);
67796787
\end{itemdecl}
67806788

67816789
\begin{itemdescr}

0 commit comments

Comments
 (0)