That did it. Thank you. We were indeed attempting to increment an iterator that was already pointing at the_list.end(). I assume the other implementations that we have used just silently leave the iterator unchanged. Anyway, the whole Tuscany SDO test suite now runs successfully. Geoff. On 06/09/06, Martin Sebor wrote: > > Geoffrey Winn wrote: > > I'm investigating an abort that I get from a Tuscant SDO test prgram > when > > built using stdcxx. I still have some investigation to do however based > on > > the code I've read I'd like to clarify the following. > > > > If I have a std:: and I've created an iterator to examine each > > item in > > the list in turn, if I then use erase to delete one of those items eg > > > > iter = the_list.erase(iter); > > > > does the iterator remain valid? > > No, erase() invalidates all iterator(s) that point to the erased > elements. However, the value returned from erase() is a valid, > although not necessarily dereferenceable iterator (it may be > end()). > > > > > I'm asking this because the abort occurs in an assert statement within > the > > implementation of the ++ operator for the iterator. > > That's probably (hopefully :-) our "safe iterator" feature kicking > in to let you know that you're trying to increment an iterator past > the end of a sequence). > > FWIW, here's how to safely erase all elements to the end of a list. > > #include > > int main () > { > const int a[] = { 1, 2, 3, 4 }; > std::list x (a, a + sizeof a / sizeof *a); > > std::list::iterator it = x.begin (); > while (it != x.end ()) > it = x.erase (it); > } > > Martin >