TL; DR : штраф до C ++ 2a, после этого std::allocator_traits<std::allocator<int>>::construct()
будет более требовательным к переданному указателю.
Ну, std::allocator_traits::construct()
использует static_cast<void*>
, так как он был введен , если только распределитель не предоставит его.
И хотя std::allocator::construct()
устарело в C ++ 17 и будет удалено в C ++ 2a, оно всегда использовало приведение в стиле c.
Таким образом, это синтаксически допустимо до C ++ 2a.
А поскольку сам объект, на который указывает указатель, не является const
, то только указатель, к которому он получен, доступен с помощью этого классификатора, отбрасывания const
и модификации совершенно допустим.
Поскольку псевдодтор для int
тривиален, даже не имеет значения, что он не вызывается до создания нового поверх него.