Не определено ли поведение ссылки на освобожденную память?
Стандарт не определяет поведения для «наличия» любого значения любого типа.
mymap.erase("eight"); // Oops! val still refers to mymap["eight"]
Это то, что стандарт говорит о поведении erase
:
[associative.reqmts] ... Элементы стирания становятся недействительными .. . ссылки на стертые элементы ...
Обратите внимание, что правило не говорит, что поведение не определено, если такие ссылки существуют. Фактически, было бы довольно бессмысленно описывать, что эти ссылки недействительны, если существование ссылки всегда будет подразумевать неопределенное поведение.
Что касается определения того, что такое недействительная ссылка ... стандарт, кажется, не хватает. Существует определение недопустимого указателя, но я не могу найти его для недопустимой ссылки. Такое отсутствие определения можно рассматривать как дефект в стандарте.