Рассмотрим:
#include <map>
int main()
{
std::map< int, int > m;
m[ 0 ] = 0;
m[ 1 ] = 1;
m.erase( 0 ); // ok
m.erase( 2 ); // no-op
m.erase( m.find( 2 ) ); // boom!
}
(ОК, поэтому в заголовке говорится об удалении итератора end(), но find вернет конец() для несуществующего ключа.)
Почему стирание несуществующего ключа ОК, но стирание end() взрывается. Я не видел никакого явного упоминания об этом в стандарте?
Я пробовал это на VS2005 (генерирует исключение в конфигурации отладки) и GCC 4.0.1 (100% CPU). Это зависит от реализации?
Спасибо.