
Brian Allison
David Abrahams wrote:
"Peter Dimov"
writes: No, a singular iterator is not a valid object and it fulfills no invariants.
That's arguable. From my POV, if it's in a state that a legal program can create, it's within the invariant by definition.
Then (if I read you correctly) even undefined behavior is within the invariant?
No, invariants are about state and UB is about behavior. Behaviors don't fall inside or outside of states.
Or have I been misunderstanding that legal programs can cause UB?
I don't understand the question, sorry. When a program causes undefined behavior, that falls into the category I'm calling "illegal program." I don't just mean those programs that can be diagnosed as illegal by the compiler.
I've always considered that UB is to be treated as "not maintaining the invariant but it's not my fault".
By whom?
But then, whether we consider UB within the invariant (and hence that an iterator is by definition always within the invariant) or whether we consider UB outisde of the invariant but one which doesn't break correctness (and hence that unassigned iterators are not capable of being within/outside of an invariant)....
... is there any practical difference between those two points of view?
Sorry, this whole behavior-within/without-the-invariant concept doesn't make any sense to me. It's probably just my too-literal mind at work, but if you could rephrase or explain maybe I could answer. -- Dave Abrahams Boost Consulting www.boost-consulting.com