Вы должны не взять изменяемую ссылку или указатель на элемент в set
. Если вы измените его свойства, вы лишите законной силы инварианты контейнера, что приведет к неопределенному поведению. Эта ошибка во время компиляции существует по уважительной причине, и, кроме того, ваш код демонстрирует отличный пример того, почему приведение в стиле C плохое - потому что оно может отбрасывать const, и никто из других ответчиков не заметил, тогда как если бы вынужденный использовать const_cast
, все бы заметили, насколько это плохо.
Однако, если вы возьмете действительное const MyType*
, то приведение будет избыточным, и &*iterator
- это отличный способ для этого.