Не стирает ли std :: list :: iterator недействительный итератор и уничтожает объект?

Почему следующий print 2 ?

list<int> l;
l.push_back( 1 );
l.push_back( 2 );
l.push_back( 3 );
list<int>::iterator i = l.begin();
i++;
l.erase( i );
cout << *i;

Я знаю, что возвращает erase , но мне интересно, почему это нормально? Или это не определено, или это зависит от компилятора?

5
задан Lightness Races with Monica 31 August 2011 в 22:39
поделиться