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