[GiNaC-list] Use of STL iterators in GiNaC

Jens Vollinga jensv at nikhef.nl
Thu Apr 16 16:02:32 CEST 2009


Hi,

Michael Goffioul schrieb:
>> factor.cpp. The code in utils.h seems to be against the standard, though,
>> but I am no language lawyer and so I am maybe misinterpreting the conditions
>> there. In case, this can be fixed by using reverse iterators.
> 
> OK, I had a look in a draft C++ standard document I could find on the
> web, and when reading 24.1.3, the "pre" condition for ++r is that r must
> be dereferenceable. When r == end(), it is not dereferenceable, so you
> cannot do ++r. Don't you have the same interpretation?

Ooops, after re-reading it: yes I do, now. I was too focused on the 
post-condition ...

> 
> In 24.1.4, the pre condition for --r is that there exists s such that r == ++s.
> For ++s to be valid, s must be dereferenceable, so s cannot be before begin().
> Moreover, the post condition is that r is dereferenceable (there seems to be
> a typo in the version I have, which says s is dereferenceable, but this doesn't
> make sense), so r cannot be before begin().

I agree. Actually, I agreed -- halfheartedly ;-) -- already in my last 
mail (see citation above). But I am not sure about the reverse iterator 
fix anymore.

> In 24.1.5, there's no pre condition on "r += n", but I think it can be deduced
> from the operational semantics and the interpretation above that you cannot
> go past end().

There you're right as well. Another thing I overlooked ...

> My general understanding is:
> 1) you cannot go before begin()
> 2) you can go after the last element, but only by an offset of 1, which
> corresponds to end()

100% agreement, now. Thanks for the clarification!

> Ok, my understanding may be wrong, but this is how Microsoft
> implemented it... :)

It seems they stick better to the rules than the gcc people ... *surprise*

Regards,
Jens


More information about the GiNaC-list mailing list