Рассмотрим следующий сценарий:
std::array<int, 8> a;
auto p = reinterpret_cast<int(*)[8]>(a.data());
(*p)[0] = 42;
Это неопределенное поведение? Я думаю, что это.
-
a.data()
возвращаетint*
, который не совпадает сint(*)[8]
-
Правила псевдонимов типа cppreference, похоже, предполагают, что
reinterpret_cast
недействителен -
Как программист, я знаю, что
a.data()
памяти, на которую указываетa.data()
представляет собой массив из8
объектовint
Есть ли какое-либо правило, которое я пропускаю, что делает этот reinterpret_cast
действительным?