Beman Dawes <[EMAIL PROTECTED]> writes: > The old input iterator 24.1.1 had a requirement: > > *r++ returned type T, semantics {T tmp= *r; ++r; return tmp; } > > The new Single Pass Iterators in N1477 have no such requirement.
That's because the requirement mixes access and traversal. > That's fine with me - that requirement was a source of bugs in my > code and violated the rule of least astonishment as far as I was > concerned. > > But before I remove the test from the filesystem library that verifies > the old input iterator semantics for directory_iterator, I'd like to > verify that the omission of *r++ was a design decision rather than an > oversight. > > The omission of special requirements for *r++ means that Readable and > Single Pass = Input, as shown in the diagram, is not actually correct, > unless I'm missing something. Thus perhaps it should be discussed in > the paper. A single-pass iterator is required to support r++ (inherited from the incrementable iterator requirements), but I guess that we've unintentionally dropped the requiremnt for *r++ of readable single-pass iterator, by allowing incrementable iterators to return any type convertible to const X&. I think it should require that the return type be X, the Assertion/Note/Precondition/Postcondition column should be labelled "Operational Semantics" and the lower right entry should be moved to the middle column. The same goes for the lower-right entry of each of the following two tables. I'm going to make those changes; if there are objections, please let me know ASAP. -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost