diff --git a/source/ranges.tex b/source/ranges.tex index 58f2ef0c01..c815c7c8f4 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -3119,7 +3119,8 @@ requires @\exposconcept{weakly-equality-comparable-with}@ && @\libconcept{copyable}@ struct iota_view::@\exposid{iterator}@ { private: - W @\exposid{value_}@ = W(); // \expos + W @\exposid{value_}@ = W(); // \expos + constexpr explicit @\exposid{iterator}@(W value); // \expos public: using iterator_concept = @\seebelow@; @@ -3129,7 +3130,6 @@ using difference_type = @\placeholdernc{IOTA-DIFF-T}@(W); @\exposid{iterator}@() requires @\libconcept{default_initializable}@ = default; - constexpr explicit @\exposid{iterator}@(W value); constexpr W operator*() const noexcept(is_nothrow_copy_constructible_v); @@ -3500,11 +3500,11 @@ requires @\exposconcept{weakly-equality-comparable-with}@ && @\libconcept{copyable}@ struct iota_view::@\exposid{sentinel}@ { private: - Bound @\exposid{bound_}@ = Bound(); // \expos + Bound @\exposid{bound_}@ = Bound(); // \expos + constexpr explicit @\exposid{sentinel}@(Bound bound); // \expos public: @\exposid{sentinel}@() = default; - constexpr explicit @\exposid{sentinel}@(Bound bound); friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); @@ -4100,8 +4100,6 @@ using difference_type = ptrdiff_t; using value_type = Val; - constexpr explicit @\exposid{iterator}@(basic_istream_view& parent) noexcept; - @\exposid{iterator}@(const @\exposid{iterator}@&) = delete; @\exposid{iterator}@(@\exposid{iterator}@&&) = default; @@ -4116,7 +4114,8 @@ friend bool operator==(const @\exposid{iterator}@& x, default_sentinel_t); private: - basic_istream_view* @\exposid{parent_}@; // \expos + constexpr explicit @\exposid{iterator}@(basic_istream_view& parent) noexcept; // \expos + basic_istream_view* @\exposid{parent_}@; // \expos }; } \end{codeblock} @@ -4880,8 +4879,9 @@ requires @\libconcept{view}@ && is_object_v class filter_view::@\exposid{iterator}@ { private: - iterator_t @\exposid{current_}@ = iterator_t(); // \expos - filter_view* @\exposid{parent_}@ = nullptr; // \expos + iterator_t @\exposid{current_}@ = iterator_t(); // \expos + filter_view* @\exposid{parent_}@ = nullptr; // \expos + constexpr @\exposid{iterator}@(filter_view& parent, iterator_t current); // \expos public: using iterator_concept = @\seebelownc@; @@ -4890,7 +4890,6 @@ using difference_type = range_difference_t; @\exposid{iterator}@() requires @\libconcept{default_initializable}@> = default; - constexpr @\exposid{iterator}@(filter_view& parent, iterator_t current); constexpr const iterator_t& base() const & noexcept; constexpr iterator_t base() &&; @@ -5135,11 +5134,11 @@ requires @\libconcept{view}@ && is_object_v class filter_view::@\exposid{sentinel}@ { private: - sentinel_t @\exposid{end_}@ = sentinel_t(); // \expos + sentinel_t @\exposid{end_}@ = sentinel_t(); // \expos + constexpr explicit @\exposid{sentinel}@(filter_view& parent); // \expos public: @\exposid{sentinel}@() = default; - constexpr explicit @\exposid{sentinel}@(filter_view& parent); constexpr sentinel_t base() const; @@ -5380,10 +5379,11 @@ template class transform_view::@\exposid{iterator}@ { private: - using @\exposidnc{Parent}@ = @\exposidnc{maybe-const}@; // \expos - using @\exposidnc{Base}@ = @\exposidnc{maybe-const}@; // \expos - iterator_t<@\exposidnc{Base}@> @\exposid{current_}@ = iterator_t<@\exposidnc{Base}@>(); // \expos - @\exposidnc{Parent}@* @\exposid{parent_}@ = nullptr; // \expos + using @\exposidnc{Parent}@ = @\exposidnc{maybe-const}@; // \expos + using @\exposidnc{Base}@ = @\exposidnc{maybe-const}@; // \expos + iterator_t<@\exposidnc{Base}@> @\exposid{current_}@ = iterator_t<@\exposidnc{Base}@>(); // \expos + @\exposidnc{Parent}@* @\exposid{parent_}@ = nullptr; // \expos + constexpr @\exposid{iterator}@(@\exposid{Parent}@& parent, iterator_t<@\exposidnc{Base}@> current); // \expos public: using iterator_concept = @\seebelownc@; @@ -5393,7 +5393,6 @@ using difference_type = range_difference_t<@\exposid{Base}@>; @\exposid{iterator}@() requires @\libconcept{default_initializable}@> = default; - constexpr @\exposid{iterator}@(@\exposid{Parent}@& parent, iterator_t<@\exposid{Base}@> current); constexpr @\exposid{iterator}@(@\exposid{iterator}@ i) requires Const && @\libconcept{convertible_to}@, iterator_t<@\exposid{Base}@>>; @@ -5767,10 +5766,10 @@ using @\exposid{Parent}@ = @\exposid{maybe-const}@; // \expos using @\exposid{Base}@ = @\exposid{maybe-const}@; // \expos sentinel_t<@\exposid{Base}@> @\exposid{end_}@ = sentinel_t<@\exposid{Base}@>(); // \expos + constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); // \expos public: @\exposid{sentinel}@() = default; - constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ i) requires Const && @\libconcept{convertible_to}@, sentinel_t<@\exposid{Base}@>>; @@ -6109,10 +6108,10 @@ template using @\exposid{CI}@ = counted_iterator>>; // \expos sentinel_t<@\exposid{Base}@> @\exposid{end_}@ = sentinel_t<@\exposid{Base}@>(); // \expos + constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); // \expos public: @\exposid{sentinel}@() = default; - constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ s) requires Const && @\libconcept{convertible_to}@, sentinel_t<@\exposid{Base}@>>; @@ -6292,14 +6291,14 @@ @\libconcept{indirect_unary_predicate}@> template class take_while_view::@\exposidnc{sentinel}@ { - using @\exposidnc{Base}@ = @\exposidnc{maybe-const}@; // \expos + using @\exposidnc{Base}@ = @\exposidnc{maybe-const}@; // \expos - sentinel_t<@\exposidnc{Base}@> @\exposid{end_}@ = sentinel_t<@\exposidnc{Base}@>(); // \expos - const Pred* @\exposid{pred_}@ = nullptr; // \expos + sentinel_t<@\exposidnc{Base}@> @\exposid{end_}@ = sentinel_t<@\exposidnc{Base}@>(); // \expos + const Pred* @\exposid{pred_}@ = nullptr; // \expos + constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end, const Pred* pred); // \expos public: @\exposid{sentinel}@() = default; - constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end, const Pred* pred); constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ s) requires Const && @\libconcept{convertible_to}@, sentinel_t<@\exposid{Base}@>>; @@ -7152,11 +7151,11 @@ using @\exposid{Parent}@ = @\exposid{maybe-const}@; // \expos using @\exposid{Base}@ = @\exposid{maybe-const}@; // \expos sentinel_t<@\exposid{Base}@> @\exposid{end_}@ = sentinel_t<@\exposid{Base}@>(); // \expos + constexpr explicit @\exposid{sentinel}@(@\exposid{Parent}@& parent); // \expos public: @\exposid{sentinel}@() = default; - constexpr explicit @\exposid{sentinel}@(@\exposid{Parent}@& parent); constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ s) requires Const && @\libconcept{convertible_to}@, sentinel_t<@\exposid{Base}@>>; @@ -7998,6 +7997,10 @@ // if \tcode{V} models \libconcept{forward_range} bool @\exposid{trailing_empty_}@ = false; // \expos + constexpr explicit @\exposid{outer-iterator}@(@\exposid{Parent}@& parent) // \expos + requires (!@\libconcept{forward_range}@<@\exposid{Base}@>); + constexpr @\exposid{outer-iterator}@(@\exposid{Parent}@& parent, iterator_t<@\exposid{Base}@> current) // \expos + requires @\libconcept{forward_range}@<@\exposid{Base}@>; public: using iterator_concept = @@ -8011,10 +8014,6 @@ using difference_type = range_difference_t<@\exposid{Base}@>; @\exposid{outer-iterator}@() = default; - constexpr explicit @\exposid{outer-iterator}@(@\exposid{Parent}@& parent) - requires (!@\libconcept{forward_range}@<@\exposid{Base}@>); - constexpr @\exposid{outer-iterator}@(@\exposid{Parent}@& parent, iterator_t<@\exposid{Base}@> current) - requires @\libconcept{forward_range}@<@\exposid{Base}@>; constexpr @\exposid{outer-iterator}@(@\exposid{outer-iterator}@ i) requires Const && @\libconcept{convertible_to}@, iterator_t<@\exposid{Base}@>>; @@ -8232,9 +8231,10 @@ template struct lazy_split_view::@\exposid{inner-iterator}@ { private: - using @\exposidnc{Base}@ = @\exposidnc{maybe-const}@; // \expos - @\exposidnc{outer-iterator}@ @\exposid{i_}@ = @\exposidnc{outer-iterator}@(); // \expos - bool @\exposid{incremented_}@ = false; // \expos + using @\exposidnc{Base}@ = @\exposidnc{maybe-const}@; // \expos + @\exposidnc{outer-iterator}@ @\exposid{i_}@ = @\exposidnc{outer-iterator}@(); // \expos + bool @\exposid{incremented_}@ = false; // \expos + constexpr explicit @\exposid{inner-iterator}@(@\exposidnc{outer-iterator}@ i); // \expos public: using iterator_concept = @\exposid{outer-iterator}@::iterator_concept; @@ -8245,7 +8245,6 @@ using difference_type = range_difference_t<@\exposid{Base}@>; @\exposid{inner-iterator}@() = default; - constexpr explicit @\exposid{inner-iterator}@(@\exposid{outer-iterator}@ i); constexpr const iterator_t<@\exposid{Base}@>& base() const & noexcept; constexpr iterator_t<@\exposid{Base}@> base() && requires @\libconcept{forward_range}@; @@ -8556,10 +8555,12 @@ @\libconcept{indirectly_comparable}@, iterator_t, ranges::equal_to> class split_view::@\exposid{iterator}@ { private: - split_view* @\exposid{parent_}@ = nullptr; // \expos - iterator_t @\exposid{cur_}@ = iterator_t(); // \expos - subrange> @\exposid{next_}@ = subrange>(); // \expos - bool @\exposid{trailing_empty_}@ = false; // \expos + split_view* @\exposid{parent_}@ = nullptr; // \expos + iterator_t @\exposid{cur_}@ = iterator_t(); // \expos + subrange> @\exposid{next_}@ = subrange>(); // \expos + bool @\exposid{trailing_empty_}@ = false; // \expos + constexpr @\exposid{iterator}@(split_view& parent, iterator_t current, // \expos + subrange> next); public: using iterator_concept = forward_iterator_tag; @@ -8568,7 +8569,6 @@ using difference_type = range_difference_t; @\exposid{iterator}@() = default; - constexpr @\exposid{iterator}@(split_view& parent, iterator_t current, subrange> next); constexpr iterator_t base() const; constexpr value_type operator*() const; @@ -8683,10 +8683,10 @@ struct split_view::@\exposid{sentinel}@ { private: sentinel_t @\exposid{end_}@ = sentinel_t(); // \expos + constexpr explicit @\exposid{sentinel}@(split_view& parent); // \expos public: @\exposid{sentinel}@() = default; - constexpr explicit @\exposid{sentinel}@(split_view& parent); friend constexpr bool operator==(const @\exposid{iterator}@& x, const @\exposid{sentinel}@& y); }; @@ -10322,6 +10322,7 @@ iterator_t<@\exposid{Base}@> @\exposid{current_}@ = iterator_t<@\exposid{Base}@>(); // \expos static constexpr decltype(auto) @\exposid{get-element}@(const iterator_t<@\exposid{Base}@>& i); // \expos + constexpr explicit @\exposid{iterator}@(iterator_t<@\exposid{Base}@> current); // \expos public: using iterator_concept = @\seebelow@; @@ -10330,7 +10331,6 @@ using difference_type = range_difference_t<@\exposid{Base}@>; @\exposid{iterator}@() requires @\libconcept{default_initializable}@> = default; - constexpr explicit @\exposid{iterator}@(iterator_t<@\exposid{Base}@> current); constexpr @\exposid{iterator}@(@\exposid{iterator}@ i) requires Const && @\libconcept{convertible_to}@, iterator_t<@\exposid{Base}@>>; @@ -10717,12 +10717,12 @@ template class elements_view::@\exposid{sentinel}@ { private: - using @\exposid{Base}@ = @\exposid{maybe-const}@; // \expos + using @\exposid{Base}@ = @\exposidnc{maybe-const}@; // \expos sentinel_t<@\exposid{Base}@> @\exposid{end_}@ = sentinel_t<@\exposid{Base}@>(); // \expos + constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); // \expos public: @\exposid{sentinel}@() = default; - constexpr explicit @\exposid{sentinel}@(sentinel_t<@\exposid{Base}@> end); constexpr @\exposid{sentinel}@(@\exposid{sentinel}@ other) requires Const && @\libconcept{convertible_to}@, sentinel_t<@\exposid{Base}@>>;