Новая std :: map :: erase() подпись С++ 17

Согласно этому ответу, iterator должен быть неявно конвертируемым в const_iterator. Так как это правда, как мы видим, что происходит в insert_or_assign(), то почему в С++ 17 была добавлена новая подпись в std::map::erase()?

В С++ 11 мы iterator erase( const_iterator pos );

В С++ 17 теперь мы iterator erase( iterator pos );

Не была ли сигнатура С++ 11 достаточной для получения iterator и const_iterator?

Ответы

Ответ 1

Там, где вы передаете iterator существует потенциальная двусмысленность со erase(const key_type& key). Рассмотрим случай, когда key_type является чем-то вроде std::any.