
Dave Abrahams wrote:
on Sat Oct 01 2011, Krzysztof Żelechowski
wrote: What I am saying is that iterators that are not default-constructible are sometimes more robust because an attempt to create them out of thin air results in a compile-time error.
Yes... except that they are not iterators.
Let’s call them concrete quasi-iterators then. It is less important how you call them than what you can do with them.
I am not saying that all iterators are like that (I agree with Dave regarding his the interpretation of NULL). Moreover, such iterators sometimes come up naturally from standard components (and not some shady third-party ones, as has been suggested), as evidenced in my code that fails to compile with Boost concepts.
Sorry, which code was that?
In the opening post.
Being a singular iterator is not a concept, it is a run-time property. The compiler cannot check whether an operator is singular, it is equivalent to the halting problem.
It can't check whether an iterator is random-access either. All (good) concepts have semantic constraints that can't be checked by the compiler.
An algorithm using a bidirectional iterator for a random-access iterator will still work, only it will take longer to accomplish. An algorithm using a singular iterator is likely to crash, which is much more serious. Also, being a singular iterator is independent of type, while being a random-access iterator is determined by type. IMHO, Chris