Boost logo

Boost :

Subject: Re: [boost] [variant] Please vote for behavior
From: Rob Stewart (robertstewart_at_[hidden])
Date: 2013-01-29 17:50:49


On Jan 29, 2013, at 7:04 AM, Joel de Guzman <djowel_at_[hidden]> wrote:

> On 1/29/13 6:56 PM, Rob Stewart wrote:
>>
>> Singular iterators are default constructed instances that represent a universal end
>> iterator. They are not associated with any particular container, but would be returned by end(), and can be obtained by advancing a non-end iterator far enough.
>
> Singular valued iterators cannot be compared (*). The only valid operations are assignment, destruction and move. There is no way to detect a singular valued iterator.
>
> (* Iterators can also have singular values that are not associated with any sequence. [ Example: After the declaration of an uninitialized pointer x (as with int* x;), x must always be assumed to have a singular value of a pointer. —end example ] Results of most expressions are undefined for singular values; the only exceptions are destroying an iterator that holds a singular value, the assignment of a non-singular value to an iterator that holds a singular value, and, for iterators that satisfy the DefaultConstructible requirements, using a value-initialized iterator as the source of a copy or move operation.)

Oh, sure, slap me down with the standard! :)

Seriously, I was thinking of, for example, std::istream_iterator. If the default constructor doesn't create a singular iterator, what is the right name? I've either forgotten it or long misapplied "singular" to such iterators.

___
Rob


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk