diff --git a/xml/issue3628.xml b/xml/issue3628.xml
index f322da8cd3..d42cb48260 100644
--- a/xml/issue3628.xml
+++ b/xml/issue3628.xml
@@ -1,7 +1,7 @@
- I believe that a careful reading of the existing wording already shows that "Equivalent to:" has
no effect of the sort claimed. But since that appears to be a common misinterpretation,
this wording adds a note to put it to rest.
-In LWG
--2- The member typedef-name iterator_category is defined if and only if Base
-models forward_range. In that case, iterator_category is defined as follows: Let C
+-2- The member typedef-name iterator_category is defined if and only if Base
+models forward_range. In that case, iterator_category is defined as follows: Let C
denote the type iterator_traits<iterator_t<Base>>::iterator_category.
(2.1) — If std::get<N>(*current_) is a (2.1) — If std::get<N>(*current_) is a (2.2) — Otherwise, if C models derived_from<random_access_iterator_tag>,
+ (2.2) — Otherwise, if C models derived_from<random_access_iterator_tag>,
iterator_category denotes random_access_iterator_tag. (2.3) — Otherwise, iterator_category denotes C.
-The old proposed resolution was incorrect. I think the correct criteria could be that determined from the return type of
+The old proposed resolution was incorrect. I think the correct criteria could be that determined from the return type of
get-element.
--2- The member typedef-name iterator_category is defined if and only if Base
-models forward_range. In that case, iterator_category is defined as follows: Let C
+-2- The member typedef-name iterator_category is defined if and only if Base
+models forward_range. In that case, iterator_category is defined as follows: Let C
denote the type iterator_traits<iterator_t<Base>>::iterator_category.
(2.1) — If range_reference_t<Base> is a reference type and
-std::get<N>(*current_) is a (2.1) — If range_reference_t<Base> is a reference type and
+std::get<N>(*current_) is a (2.2) — Otherwise, if C models derived_from<random_access_iterator_tag>,
+ (2.2) — Otherwise, if C models derived_from<random_access_iterator_tag>,
iterator_category denotes random_access_iterator_tag. (2.3) — Otherwise, iterator_category denotes C.
--2- The member typedef-name (2.1) — If (2.1) — If (2.2) — Otherwise, if (2.2) — Otherwise, if (2.3) — Otherwise,
-Currently, std::(ranges::)destroy_at is specified to destroy array elements in the increasing index order
-(
The suggested fix indeed corrects an inconsistency, but also implies a silent behaviour change at runtime, since at least MSVC STL and
-libstdc++ implement the array destruction order as specified (others not tested).
+libstdc++ implement the array destruction order as specified (others not tested).
The below wording therefore suggests to introduce a specific feature macro for this, so that user code can potentially react on this,
-regardless of potential vendor API breakage hesitations.
-The natural feature macro to increase would be that which introduced the specific array destruction behavior of destroy_at,
-which was
-
@@ -55,7 +55,7 @@ denote the type iterator_traits<iterator_t<Base>>::iterat
n prvalue,
+n prvalue,
iterator_category denotes input_iterator_tag.
-
@@ -89,6 +89,9 @@ is a reference type, iterator_category denotes input_iterator
n prvalue or neither
-range_reference_t<Base> nor tuple_element_t<N, range_reference_t<Base>
+n prvalue or neither
+range_reference_t<Base> nor tuple_element_t<N, range_reference_t<Base>
is a reference type, iterator_category denotes input_iterator_tag.
iterator_category is defined if and only if Base
-models forward_range. In that case, iterator_category is defined as follows: Let C
+-2- The member typedef-name iterator_category is defined if and only if Base
+models forward_range. In that case, iterator_category is defined as follows: Let C
denote the type iterator_traits<iterator_t<Base>>::iterator_category.
-
diff --git a/xml/issue3889.xml b/xml/issue3889.xml
index faa43df67c..6410f8ea8d 100644
--- a/xml/issue3889.xml
+++ b/xml/issue3889.xml
@@ -1,7 +1,7 @@
-is_reference_v<decltype(get-element(current_))>
+std::get<N>(*current_)is_reference_v<decltype(get-element(current_))>
is std::get<N>(*current_)an rvaluefalse, iterator_category denotes input_iterator_tag.C models derived_from<random_access_iterator_tag>,
+C models derived_from<random_access_iterator_tag>,
iterator_category denotes random_access_iterator_tag.iterator_category denotes C.
The chairs will give LEWG a heads-up that we are making this change.
-The two convertible_to constraints required by ranges::fold_meow mainly -check whether the decayed result type of the binary operator can be constructed by both the invoke type +The two convertible_to constraints required by ranges::fold_meow mainly +check whether the decayed result type of the binary operator can be constructed by both the invoke type and the initial value type.
-However, using constructible_from seems more appropriate here because we don't need to care whether +However, using constructible_from seems more appropriate here because we don't need to care whether the two types can be converted implicitly and explicitly. -Taking string and string_view as examples, the former can only be explicitly constructed by -the latter and can be assigned by the latter, which makes ranges::fold_meow unable to fold +Taking string and string_view as examples, the former can only be explicitly constructed by +the latter and can be assigned by the latter, which makes ranges::fold_meow unable to fold ranges whose elements are of type string with an initial value of type string_view:
@@ -26,8 +26,8 @@ string_view init{"d"};
auto result = ranges::fold_right(vs, init, plus{}); // still ill-formed after as the constraint is not satisfied
-In addition, the two movable constraints in the function signature seem to be too strict as well since we -only need to check that the decayed result type and the initial type can be move-constructible (one for returned by +In addition, the two movable constraints in the function signature seem to be too strict as well since we +only need to check that the decayed result type and the initial type can be move-constructible (one for returned by elidable move and one for move into other overloads) instead of whether they can be move-assignable.
@@ -42,6 +42,8 @@ it would also allowvector<string>/int,
which is much less so."
+-8- Remarks: The return type is fold_left_with_iter_result<I, U> -for the first overload and fold_left_with_iter_result<borrowed_iterator_t<R>, U> +for the first overload and fold_left_with_iter_result<borrowed_iterator_t<R>, U> for the second overload.
diff --git a/xml/issue4116.xml b/xml/issue4116.xml index c9e4a8d3f6..667f7a75ea 100644 --- a/xml/issue4116.xml +++ b/xml/issue4116.xml @@ -1,7 +1,7 @@ -Six votes for Tentatively Ready, but not unanimous.
+ +move_iterator should provide iterator_category only when it models
forward_iterator