
Ion GaztaƱaga <igaztanaga@gmail.com> writes:
It's not a legal random access (or even forward) iterator if it visits the same *element* more than once in a traversal. That's why I said the above about the iterator category.
Ooops! I would agree that for non-const values it wouldn't be a random-access but as an read iterator with const values you can't notice it's returning the same value unless you unconst it.
You can check the address. Is that an issue? I'm not sure. It's the old "equivalence" problem again.
The random access tag is in my opinion a strongest point of the iterator, you can get a performance boost in many applications (specially when implementing containers). I'm out of ideas about how to solve this. Can't we live breaking the law? Should we create new categories? Just let it as a "poor" input iterator?
We already have new categories. It can report that it has random access traversal. It's just not allowed to have random_access_iterator_tag. See the "new iterator categories" document.
Whoops, "constant iterator" is already overloaded with a different meaning. Something else, maybe... "repeat iterator?"
constant_iterator is also very similar to const_iterator.
That's a "pre-existing condition." -- Dave Abrahams Boost Consulting www.boost-consulting.com