Мне интересно, если это неопределенное поведение:
#include <stdint.h>
int main() {
auto* p = new uint8_t[32];
float* c = reinterpret_cast<float*>(p);
delete[] c;
}
В стандарте есть
Если нет, поведение не определено. Во втором альтернативе (удалить массив) значение операнда удаления может быть значением нулевого указателя или значением указателя, которое было получено из предыдущего массива new-expression.79 Если нет, поведение не определено. [Примечание: это означает, что синтаксис выражения-удаления должен соответствовать типу объекта, выделенного новым, а не синтаксис нового выражения. - конечная нота]
Поэтому интерпретация несколько неясной фразы
это означает, что синтаксис выражения-delete должен соответствовать типу объекта, выделенного новым, а не синтаксис нового выражения
Могу сказать, что вышеизложенное - это неопределенное поведение, правильно?