Похоже, что существует некоторая договоренность о том, что вы не можете willy nilly point (int *) в массив char
из-за правил псевдонимов С++.
Из этого другого вопроса - Общее хранилище char [] и избегающего строгого сглаживания UB - кажется, что ему разрешено ( ) используйте хранилище через новое размещение.
alignas(int) char buf[sizeof(int)];
void f() {
// turn the memory into an int: (??) from the POV of the abstract machine!
::new (buf) int; // is this strictly required? (aside: it obviously a no-op)
// access storage:
*((int*)buf) = 42; // for this discussion, just assume the cast itself yields the correct pointer value
}
Итак, это выше законный С++ и является новым местом размещения, необходимым для того, чтобы сделать его законным?