Skip to content

Commit 387e3f5

Browse files
burblebeetkoeppe
authored andcommitted
LWG3760 cartesian_product_view::iterator's parent_ is never valid
[range.cartesian.iterator] Use \exposidnc on exposids when followed by an \expos comment.
1 parent 9690227 commit 387e3f5

File tree

1 file changed

+22
-13
lines changed

1 file changed

+22
-13
lines changed

source/ranges.tex

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14345,7 +14345,9 @@
1434514345
\pnum
1434614346
\effects
1434714347
Equivalent to:
14348-
\tcode{return \exposid{iterator}<false>(\exposid{tuple-transform}(ranges::begin, \exposid{bases_}));}
14348+
\begin{codeblock}
14349+
return @\exposid{iterator}@<false>(*this, @\exposid{tuple-transform}@(ranges::begin, @\exposid{bases_}@));
14350+
\end{codeblock}
1434914351
\end{itemdescr}
1435014352

1435114353
\begin{itemdecl}
@@ -14357,7 +14359,9 @@
1435714359
\pnum
1435814360
\effects
1435914361
Equivalent to:
14360-
\tcode{return \exposid{iterator}<true>(\exposid{tuple-transform}(ranges::begin, \exposid{bases_}));}
14362+
\begin{codeblock}
14363+
return @\exposid{iterator}@<true>(*this, @\exposid{tuple-transform}@(ranges::begin, @\exposid{bases_}@));
14364+
\end{codeblock}
1436114365
\end{itemdescr}
1436214366

1436314367
\begin{itemdecl}
@@ -14391,7 +14395,7 @@
1439114395
\effects
1439214396
Equivalent to:
1439314397
\begin{codeblock}
14394-
@\exposid{iterator}@<@\exposid{is-const}@> it(@\exposid{tuple-transform}@(
14398+
@\exposid{iterator}@<@\exposid{is-const}@> it(*this, @\exposid{tuple-transform}@(
1439514399
[](auto& rng){ return @\exposid{begin-or-first-end}@(rng); }, @\exposid{bases_}@));
1439614400
return it;
1439714401
\end{codeblock}
@@ -14506,21 +14510,22 @@
1450614510
@\libconcept{indirectly_swappable}@<iterator_t<@\exposid{maybe-const}@<Const, Vs>>>);
1450714511

1450814512
private:
14509-
@\exposid{maybe-const}@<Const, cartesian_product_view>* @\exposid{parent_}@ = nullptr; // \expos
14513+
using @\exposidnc{Parent}@ = @\exposidnc{maybe-const}@<Const, cartesian_product_view>; // \expos
14514+
@\exposidnc{Parent}@* @\exposidnc{parent_}@ = nullptr; // \expos
1451014515
tuple<iterator_t<@\exposid{maybe-const}@<Const, First>>,
14511-
iterator_t<@\exposid{maybe-const}@<Const, Vs>>...> @\exposid{current_}@; // \expos
14516+
iterator_t<@\exposidnc{maybe-const}@<Const, Vs>>...> @\exposidnc{current_}@; // \expos
1451214517

1451314518
template<size_t N = sizeof...(Vs)>
14514-
constexpr void @\exposid{next}@(); // \expos
14519+
constexpr void @\exposidnc{next}@(); // \expos
1451514520

1451614521
template<size_t N = sizeof...(Vs)>
14517-
constexpr void @\exposid{prev}@(); // \expos
14522+
constexpr void @\exposidnc{prev}@(); // \expos
1451814523

1451914524
template<class Tuple>
14520-
constexpr difference_type @\exposid{distance-from}@(Tuple t); // \expos
14525+
constexpr difference_type @\exposidnc{distance-from}@(Tuple t); // \expos
1452114526

14522-
constexpr explicit @\exposid{iterator}@(tuple<iterator_t<@\exposid{maybe-const}@<Const, First>>,
14523-
iterator_t<@\exposid{maybe-const}@<Const, Vs>>...> current); // \expos
14527+
constexpr @\exposid{iterator}@(@\exposid{Parent}@& parent, tuple<iterator_t<@\exposid{maybe-const}@<Const, First>>,
14528+
iterator_t<@\exposidnc{maybe-const}@<Const, Vs>>...> current); // \expos
1452414529
};
1452514530
}
1452614531
\end{codeblock}
@@ -14633,14 +14638,16 @@
1463314638
\end{itemdescr}
1463414639

1463514640
\begin{itemdecl}
14636-
constexpr explicit @\exposid{iterator}@(tuple<iterator_t<@\exposid{maybe-const}@<Const, First>>,
14641+
constexpr @\exposid{iterator}@(@\exposid{Parent}@& parent, tuple<iterator_t<@\exposid{maybe-const}@<Const, First>>,
1463714642
iterator_t<@\exposid{maybe-const}@<Const, Vs>>...> current);
1463814643
\end{itemdecl}
1463914644

1464014645
\begin{itemdescr}
1464114646
\pnum
1464214647
\effects
14643-
Initializes \exposid{current_} with \tcode{std::move(current)}.
14648+
Initializes
14649+
\exposid{parent_} with \tcode{addressof(parent)} and
14650+
\exposid{current_} with \tcode{std::move(current)}.
1464414651
\end{itemdescr}
1464514652

1464614653
\begin{itemdecl}
@@ -14652,7 +14659,9 @@
1465214659
\begin{itemdescr}
1465314660
\pnum
1465414661
\effects
14655-
Initializes \exposid{current_} with \tcode{std::move(i.\exposid{current_})}.
14662+
Initializes
14663+
\exposid{parent_} with \tcode{i.\exposid{parent_}} and
14664+
\exposid{current_} with \tcode{std::move(i.\exposid{current_})}.
1465614665
\end{itemdescr}
1465714666

1465814667
\begin{itemdecl}

0 commit comments

Comments
 (0)