erase returns an iterator to the first element after the erase(d) one(s).
So it could be done like that
Code:
 for (list<Foo>::iterator it = myList.begin( ); i != myList.end( ) ) {
    if (it->NeedsDeletion( )) {
        it = myList.erase(it);
    }
    else
kurt