Boost logo

Boost Users :

Subject: Re: [Boost-users] A forward iterator need not be default-constructible
From: Dave Abrahams (dave_at_[hidden])
Date: 2011-09-30 11:03:15

on Thu Sep 29 2011, Andrew Sutton <> wrote:

>> Yes; this is a problem with negative requirements statements.  Just like
>> you can't decrement a forward iterator, you can't dereference a singular
>> iterator.
> The characterization "just like" is a little off. Trying to decrement
> a forward iterator is a conceptual error. Trying to dereference an
> iterator with a singular value is a logic error.

Meh. They're both programming errors. The first one can be caught at
compile time, so they're different in that way, but that doesn't really
affect my point.

> I think we get into trouble when we talk about "valid iterators". I
> don't think there's such really such a thing at all. There may be
> cases where it's valid to decrement an iterator, but not dereference
> it. There may be cases where it's valid to dereference an iterator but
> not decrement. A PTE iterator is well-formed, but both incrementing
> and dereferencing is invalid.
>> The point is that the OP claimed every default-constructed iterator is
>> singular.  The only way that could be true is if you take the term
>> "is-a" in the sense I'm using it here.  That is, I can easily create an
>> iterator that, when default-constructed, supports a strict superset of
>> the required operations for singular iterators.
> Without any strong guarantees about the state of default constructed
> iterators in general, I don't think I'd try to use them in a generic
> algorithm.

No, of course not.

Dave Abrahams
BoostPro Computing

Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at