Мы (все) знаем, что стирание элемента, указателя с помощью итератора делает итератор недействительным, например:
std::map< .. > map_;
std::map< .. >::iterator iter;
// ..
map_.erase( iter ); // this will invalidate `iter`.
Но что насчет:
map_.erase( map_.begin() );
это безопасно? Будет ли map_.begin()
допустимым итератором, указывающим на (новый) первый элемент карты?
"проверить" - это не решение.