From dd50d3f2abeaf5ae542e31243b1b46cda1f287d9 Mon Sep 17 00:00:00 2001
From: Dave Abrahams
if C is convertible to std::input_iterator_tag or @@ -1465,38 +1465,42 @@ convertible, and not to any more-derived traversal tag type.
indirect_iterator requirements
-CategoryOrTraversal argument shall be use_default or it -shall be convertible to one of the standard iterator or traversal -tags. If CategoryOrTraversal is not use_default, it shall -indicate the traversal category modeled by Iterator. If
-The expression *v, where v is an object of type +
The expression *v, where v is an object of iterator_traits<Iterator>::value_type, shall be valid -expression and convertible to reference. Also -indirect_iterator::reference must be convertible to -indirect_iterator::value. There are further requirements on -the iterator_traits<Iterator>::value_type if the Value +expression and convertible to reference. Iterator shall +model the traversal concept indicated by iterator_category. +Value, Reference, and Difference shall be chosen so +that value_type, reference, and difference_type meet +the requirements indicated by iterator_category.
+[Note: there are further requirements on the +iterator_traits<Iterator>::value_type if the Value parameter is not use_default, as implied by the algorithm for -deducing the default for the value_type member.
+deducing the default for the value_type member.]indirect_iterator models
-If CategoryOrTraversal is a standard iterator tag, -indirect_iterator is a model of the iterator concept corresponding -to the tag, otherwise indirect_iterator satisfies the requirements -of the most refined standard traversal concept that is satisfied by -the Iterator argument.
-indirect_iterator models Readable Iterator. If -indirect_iterator::reference(*v) = t is a valid expression (where -t is an object of type indirect_iterator::value_type) then -indirect_iterator models Writable Iterator. If -indirect_iterator::reference is a reference then -indirect_iterator models Lvalue Iterator.
+In addition to the concepts indicated by iterator_category, a +specialization of indirect_iterator models the following +concepts, Where v is an object of +iterator_traits<Iterator>::value_type:
++++
+- Readable Iterator if reference(*v) is convertible to +value_type.
+- Writable Iterator if reference(*v) = t is a valid +expression (where t is an object of type +indirect_iterator::value_type)
+- Lvalue Iterator if reference is a reference type.
+Two specializations of indirect_iterator are interoperable if +their Iterator parameters are interoperable.
indirect_iterator operations
-In addition to the operations required by the concepts modeled by -indirect_iterator, indirect_iterator provides the following -operations.
+In addition to the operations required by the concepts described +above, specializations of indirect_iterator provide the +following operations.
indirect_iterator();
diff --git a/doc/indirect_iterator.html b/doc/indirect_iterator.html index ab8bf92..14b31dc 100644 --- a/doc/indirect_iterator.html +++ b/doc/indirect_iterator.html @@ -129,7 +129,7 @@ else R is reference and V is value_type, and where: if CategoryOrTraversal is use_default, C is iterator_traversal<Iterator>::type and otherwise C is -CategoryOrTraversal: +CategoryOrTraversal.
if C is convertible to std::input_iterator_tag or @@ -179,38 +179,42 @@ convertible, and not to any more-derived traversal tag type.
indirect_iterator requirements
-CategoryOrTraversal argument shall be use_default or it -shall be convertible to one of the standard iterator or traversal -tags. If CategoryOrTraversal is not use_default, it shall -indicate the traversal category modeled by Iterator. If
-The expression *v, where v is an object of type +
The expression *v, where v is an object of iterator_traits<Iterator>::value_type, shall be valid -expression and convertible to reference. Also -indirect_iterator::reference must be convertible to -indirect_iterator::value. There are further requirements on -the iterator_traits<Iterator>::value_type if the Value +expression and convertible to reference. Iterator shall +model the traversal concept indicated by iterator_category. +Value, Reference, and Difference shall be chosen so +that value_type, reference, and difference_type meet +the requirements indicated by iterator_category.
+[Note: there are further requirements on the +iterator_traits<Iterator>::value_type if the Value parameter is not use_default, as implied by the algorithm for -deducing the default for the value_type member.
+deducing the default for the value_type member.]indirect_iterator models
-If CategoryOrTraversal is a standard iterator tag, -indirect_iterator is a model of the iterator concept corresponding -to the tag, otherwise indirect_iterator satisfies the requirements -of the most refined standard traversal concept that is satisfied by -the Iterator argument.
-indirect_iterator models Readable Iterator. If -indirect_iterator::reference(*v) = t is a valid expression (where -t is an object of type indirect_iterator::value_type) then -indirect_iterator models Writable Iterator. If -indirect_iterator::reference is a reference then -indirect_iterator models Lvalue Iterator.
+In addition to the concepts indicated by iterator_category, a +specialization of indirect_iterator models the following +concepts, Where v is an object of +iterator_traits<Iterator>::value_type:
++++
+- Readable Iterator if reference(*v) is convertible to +value_type.
+- Writable Iterator if reference(*v) = t is a valid +expression (where t is an object of type +indirect_iterator::value_type)
+- Lvalue Iterator if reference is a reference type.
+Two specializations of indirect_iterator are interoperable if +their Iterator parameters are interoperable.
indirect_iterator operations
-In addition to the operations required by the concepts modeled by -indirect_iterator, indirect_iterator provides the following -operations.
+In addition to the operations required by the concepts described +above, specializations of indirect_iterator provide the +following operations.
indirect_iterator();
diff --git a/doc/indirect_iterator_ref.rst b/doc/indirect_iterator_ref.rst index 700815b..627834e 100644 --- a/doc/indirect_iterator_ref.rst +++ b/doc/indirect_iterator_ref.rst @@ -70,45 +70,52 @@ following pseudo-code. We use the abbreviation ``R`` is ``reference`` and ``V`` is ``value_type``, and where: if ``CategoryOrTraversal`` is ``use_default``, ``C`` is ``iterator_traversal ::type`` and otherwise ``C`` is -``CategoryOrTraversal``: +``CategoryOrTraversal``. .. include:: facade_iterator_category.rst ``indirect_iterator`` requirements .................................. -The expression ``*v``, where ``v`` is an object of type +The expression ``*v``, where ``v`` is an object of ``iterator_traits ::value_type``, shall be valid -expression and convertible to ``reference``. [Note: there are -further requirements on the +expression and convertible to ``reference``. ``Iterator`` shall +model the traversal concept indicated by ``iterator_category``. +``Value``, ``Reference``, and ``Difference`` shall be chosen so +that ``value_type``, ``reference``, and ``difference_type`` meet +the requirements indicated by ``iterator_category``. + +[Note: there are further requirements on the ``iterator_traits ::value_type`` if the ``Value`` parameter is not ``use_default``, as implied by the algorithm for deducing the default for the ``value_type`` member.] - ``indirect_iterator`` models ............................ -If ``CategoryOrTraversal`` is a standard iterator tag, -``indirect_iterator`` is a model of the iterator concept -corresponding to the tag. Otherwise, ``indirect_iterator`` -satisfies the requirements of the most refined standard traversal -concept that is satisfied by the ``Iterator`` argument. +In addition to the concepts indicated by ``iterator_category``, a +specialization of ``indirect_iterator`` models the following +concepts, Where ``v`` is an object of +``iterator_traits ::value_type``: -``indirect_iterator`` models Readable Iterator. If -``indirect_iterator::reference(*v) = t`` is a valid expression (where -``t`` is an object of type ``indirect_iterator::value_type``) then -``indirect_iterator`` models Writable Iterator. If -``indirect_iterator::reference`` is a reference then -``indirect_iterator`` models Lvalue Iterator. + * Readable Iterator if ``reference(*v)`` is convertible to + ``value_type``. + + * Writable Iterator if ``reference(*v) = t`` is a valid + expression (where ``t`` is an object of type + ``indirect_iterator::value_type``) + * Lvalue Iterator if ``reference`` is a reference type. + +Two specializations of ``indirect_iterator`` are interoperable if +their ``Iterator`` parameters are interoperable. ``indirect_iterator`` operations ................................ -In addition to the operations required by the concepts modeled by -``indirect_iterator``, ``indirect_iterator`` provides the following -operations. +In addition to the operations required by the concepts described +above, specializations of ``indirect_iterator`` provide the +following operations. ``indirect_iterator();`` diff --git a/doc/new-iter-concepts.html b/doc/new-iter-concepts.html index c71fd0d..58e61ba 100755 --- a/doc/new-iter-concepts.html +++ b/doc/new-iter-concepts.html @@ -1024,7 +1024,6 @@ LocalWords: TraversalTag typename lvalues DWA Hmm JGS mis enum -->