Boost logo

Boost :

Subject: Re: [boost] [iterator] reverse_iterator<counting_iterator<T>>
From: Arno Schödl (aschoedl_at_[hidden])
Date: 2010-04-13 09:52:33

"Stewart, Robert" <Robert.Stewart_at_[hidden] <mailto:Robert.Stewart_at_[hidden]> > wrote in message news:DF2E67F3D097004694C8428C70A3FD690470B26B7F_at_[hidden] <news:DF2E67F3D097004694C8428C70A3FD690470B26B7F_at_[hidden]> ...

> this->base() calls iterator_adaptor<>::base(), which returns a reference to the underlying iterator it holds. Passing that reference to boost::prior() means that prior() pre-decrements the iterator within the iterator_adaptor. It would be odd for that

>decrement operator to return anything but a reference to the decremented object, so boost::prior() returns a reference to its decremented argument, a reference to the decremented iterator within the iterator_adaptor.

> I see no problem.

boost::prior(...) internally makes a copy of its iterator argument, decrements it and returns it by value, so far so good. counting_iterator::operator* then returns a reference into this (temporary) iterator. Returning from reverse_iterator::dereference() destroys the temporary iterator, but still returns the reference pointing into it. I overlooked that I already filed a defect a while ago for it: <>


It would be great to have it fixed, because the bug is quite subtle and may go undetected for a while.




Dr. Arno Schoedl · aschoedl_at_[hidden] 
Technical Director 
think-cell Software GmbH · Chausseestr. 8/E · 10115 Berlin, Germany · phone +49 30 666473-10 · toll-free (US) +1 800 891 8091
Directors: Dr. Markus Hannebauer, Dr. Arno Schoedl · Amtsgericht Berlin-Charlottenburg, HRB 85229

Boost list run by bdawes at, gregod at, cpdaniel at, john at