forked from boostorg/iterator
responses to Dave's comments
[SVN r20835]
This commit is contained in:
@ -86,20 +86,32 @@ The same problem applies to ``is_swappable``.
|
|||||||
which requires the trait to be derived from either true_type or
|
which requires the trait to be derived from either true_type or
|
||||||
false_type (as of the last LWG meeting).
|
false_type (as of the last LWG meeting).
|
||||||
|
|
||||||
|
.. I must not have been there for that. Could you handle
|
||||||
|
giving it attention? -JGS
|
||||||
|
|
||||||
|
|
||||||
3. Change ``iterator_tag`` to::
|
3. Change ``iterator_tag`` to::
|
||||||
|
|
||||||
template <class Value, class Reference, class Traversal>
|
template <class Value, class Reference, class Traversal>
|
||||||
struct iterator_tag;
|
struct iterator_tag;
|
||||||
|
|
||||||
The argument for ``Value`` must be the ``value_type`` of the
|
If ``iterator_tag`` is to be used as the ``iterator_category``
|
||||||
iterator, possibly const-qualified, ``Reference`` must be the
|
for iterator type ``X``, then the argument for ``Value`` must be
|
||||||
return type of ``operator*`` [*]_, and ``Traversal`` the
|
the ``value_type`` for iterator ``X``, possibly const-qualified
|
||||||
traversal tag for the iterator.
|
to indicate a non-writable iterator. The argument for
|
||||||
|
``Reference`` must be the
|
||||||
|
return type of ``operator*`` [*]_, and the argument for ``Traversal``
|
||||||
|
must be the traversal tag for the iterator.
|
||||||
|
|
||||||
.. I think the language above is still too informal. There is no
|
.. I think the language above is still too informal. There is no
|
||||||
"the iterator", when considering iterator_tag in isolation.
|
"the iterator", when considering iterator_tag in isolation.
|
||||||
Perhaps that language belongs in a non-normative note
|
Perhaps that language belongs in a non-normative note
|
||||||
|
|
||||||
|
.. I'm not so sure it makes sense to talk of iterator_tag in
|
||||||
|
isolation. I've added some more words to spell out the
|
||||||
|
connection between "the iterator" and the iterator_tag. -JGS
|
||||||
|
|
||||||
|
|
||||||
``iterator_tag<Value,Reference,Traversal>`` is required to be
|
``iterator_tag<Value,Reference,Traversal>`` is required to be
|
||||||
convertible to both ``Traversal`` tag and also to the
|
convertible to both ``Traversal`` tag and also to the
|
||||||
``iterator_category`` type specified by the following
|
``iterator_category`` type specified by the following
|
||||||
@ -127,6 +139,7 @@ The same problem applies to ``is_swappable``.
|
|||||||
return output_iterator_tag;
|
return output_iterator_tag;
|
||||||
|
|
||||||
.. I reformatted the code for legibility; sorry.
|
.. I reformatted the code for legibility; sorry.
|
||||||
|
.. No problemo. -JGS
|
||||||
|
|
||||||
.. [*] Instead of saying "return type of operator*", we could have
|
.. [*] Instead of saying "return type of operator*", we could have
|
||||||
said ``iterator_traits<X>::reference``. However, the standard
|
said ``iterator_traits<X>::reference``. However, the standard
|
||||||
@ -135,6 +148,13 @@ The same problem applies to ``is_swappable``.
|
|||||||
cases it explicitly differs from the return type of
|
cases it explicitly differs from the return type of
|
||||||
``operator*``, for example see ``istreambuf_iterator``.
|
``operator*``, for example see ``istreambuf_iterator``.
|
||||||
|
|
||||||
|
.. Hmm, istreambuf_iterator does not fit nicely into the new iterator
|
||||||
|
categories. It's reference type is charT& but the return type
|
||||||
|
of operator* is charT. In the new concepts, these are required to be
|
||||||
|
the same type. We'll have to deal with this in the
|
||||||
|
reference problem paper. -JGS
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
4. Change the specification of ``traversal_category`` to::
|
4. Change the specification of ``traversal_category`` to::
|
||||||
|
|
||||||
@ -195,8 +215,8 @@ The same problem applies to ``is_swappable``.
|
|||||||
deduce the appropriate old iterator category. The
|
deduce the appropriate old iterator category. The
|
||||||
``Value`` and ``Reference`` parameters fill this need.
|
``Value`` and ``Reference`` parameters fill this need.
|
||||||
Note that this solution cleans up the issue that John
|
Note that this solution cleans up the issue that John
|
||||||
Maddock raised on the reflector (``c++std-lib-12187``) about the non-uniformity
|
Maddock raised on the reflector (``c++std-lib-12187``) about the
|
||||||
of the lvalue bit.
|
non-uniformity of the lvalue bit.
|
||||||
|
|
||||||
4. The changes to the specification of ``traversal_category`` are a
|
4. The changes to the specification of ``traversal_category`` are a
|
||||||
direct result of the changes to ``iterator_tag``.
|
direct result of the changes to ``iterator_tag``.
|
||||||
|
Reference in New Issue
Block a user