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

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

В С++ 11 у нас есть iterator erase( const_iterator pos );

В C++17 у нас теперь есть iterator erase( iterator pos );

Разве сигнатура C++11 не была достаточно хороша, чтобы получить iterator и const_iterator?


person João Paulo    schedule 08.06.2018    source источник


Ответы (1)


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

person T.C.    schedule 08.06.2018