$ 5.2.11 / 7 - "[Примечание: в зависимости от типа объекта операция записи через указатель, lvalue или указатель на член данных, являющаяся результатом const_cast, отбрасывающего квалификатор const68) может strong > производить неопределенное поведение (7.1.5.1).] "
Формулировки этого раздела (C ++ 03) меня удивляют. Удивительны две вещи.
а) Во-первых, использование слова «может». Почему это «может»? Другие места в Стандарте дают очень точные сведения о неопределенном поведении.
б) Почему отказ от константности изначально константного объекта не сразу приводит к «неопределенному поведению». Почему для запуска UB требуется запись?
7.1.5.1/4
, который, как мне кажется, поясняет, что это не UB, если исходный объект не был объявленconst
. Формулировка этого бита в Стандарте до некоторой степени неоднозначна. Но есть намеренно написанный пример кода, процитированный на одном дыхании, указывающий на то, что определена запись черезconst_cast
ed ref / ptr к изначально не-const
объекту, что я считаю более авторитетным, чем абзац с зависимостью и может в нем. ;) - person underscore_d   schedule 23.02.2016