Стандарт C ++ (черновик) содержит то, что я называю «предложением о пригодности для использования», то есть [базовый .life] / 10:
Создание нового объекта в хранилище, которое занимает полный константный объект со статической, потоковой или автоматической продолжительностью хранения, или в хранилище, которое такой константный объект занимал до окончания его жизненного цикла, приводит к неопределенному поведению.
Первая часть хороша: «статика, поток», «продолжительность хранения». Было бы неразумно разрешать повторное использование такого хранилища.
А как насчет последней части:
автоматический срок хранения занимает или в пределах объема памяти, который такой константный объект занимал до истечения срока его существования.
Означает ли это, что пользователю следует избегать создания каких-либо объектов в любом месте памяти, которое могло быть использовано стеком (для хранения автоматических объектов)?
Это предотвратило бы использование размещения new на любом подобъекте автоматического объекта или использование библиотечного инструмента, который делает это.
В этом нет никакого смысла, но мне кажется, что это буквально то, что здесь указано.
void f() { int i = 1; int *p = new(&i) int(2); *p = 3; }
- person curiousguy   schedule 13.12.2019i
не является константой, поэтому этот раздел не применяется. - person molbdnilo   schedule 13.12.2019const
объектов. Было бы лучше, если бы в вопросе был показан код, который, по вашему мнению, явно исключен. - person M.M   schedule 13.12.2019const
означает, что создание любого объекта исключено - person M.M   schedule 13.12.2019