Boost logo

Boost Users :

Subject: Re: [Boost-users] A forward iterator need not be default-constructible
From: Krzysztof Żelechowski (giecrilj_at_[hidden])
Date: 2011-10-02 14:02:26


Dave Abrahams wrote:

>
> on Sat Oct 01 2011, Krzysztof Żelechowski <giecrilj-AT-stegny.2a.pl>
> 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


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net