Skip to content

Commit 3c8ea9e

Browse files
burblebeetkoeppe
authored andcommitted
LWG3664 LWG 3392 broke std::ranges::distance(a, a+3)
1 parent 093308e commit 3c8ea9e

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

source/iterators.tex

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -243,11 +243,11 @@
243243
S bound);
244244

245245
// \ref{range.iter.op.distance}, \tcode{ranges::distance}
246-
template<@\libconcept{input_or_output_iterator}@ I, @\libconcept{sentinel_for}@<I> S>
246+
template<class I, @\libconcept{sentinel_for}@<I> S>
247247
requires (!@\libconcept{sized_sentinel_for}@<S, I>)
248248
constexpr iter_difference_t<I> distance(I first, S last); // freestanding
249-
template<@\libconcept{input_or_output_iterator}@ I, @\libconcept{sized_sentinel_for}@<I> S>
250-
constexpr iter_difference_t<I> distance(const I& first, const S& last); // freestanding
249+
template<class I, @\libconcept{sized_sentinel_for}@<decay_t<I>> S>
250+
constexpr iter_difference_t<decay_t<I>> distance(I&& first, S last); // freestanding
251251
template<@\libconcept{range}@ R>
252252
constexpr range_difference_t<R> distance(R&& r); // freestanding
253253

@@ -3028,7 +3028,7 @@
30283028
\rSec3[range.iter.op.distance]{\tcode{ranges::distance}}
30293029
\indexlibraryglobal{distance}%
30303030
\begin{itemdecl}
3031-
template<@\libconcept{input_or_output_iterator}@ I, @\libconcept{sentinel_for}@<I> S>
3031+
template<class I, @\libconcept{sentinel_for}@<I> S>
30323032
requires (!@\libconcept{sized_sentinel_for}@<S, I>)
30333033
constexpr iter_difference_t<I> ranges::distance(I first, S last);
30343034
\end{itemdecl}
@@ -3046,14 +3046,14 @@
30463046

30473047
\indexlibraryglobal{distance}%
30483048
\begin{itemdecl}
3049-
template<@\libconcept{input_or_output_iterator}@ I, @\libconcept{sized_sentinel_for}@<I> S>
3050-
constexpr iter_difference_t<I> ranges::distance(const I& first, const S& last);
3049+
template<class I, @\libconcept{sized_sentinel_for}@<decay_t<I>> S>
3050+
constexpr iter_difference_t<decay_t<I>> ranges::distance(I&& first, S last);
30513051
\end{itemdecl}
30523052

30533053
\begin{itemdescr}
30543054
\pnum
30553055
\effects
3056-
Equivalent to: \tcode{return last - first;}
3056+
Equivalent to: \tcode{return last - static_cast<const decay_t<I>\&>(first);}
30573057
\end{itemdescr}
30583058

30593059
\indexlibraryglobal{distance}%

0 commit comments

Comments
 (0)