Рассмотрим следующий сценарий:
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 действительным?
