Это действительно нарушает правила строгого наложения имен?

Когда я компилирую этот пример кода, используя g ++, я получаю это предупреждение:

предупреждение: разыменование указателя типа-наказание нарушит правила строгого наложения имен[-Wstrict-aliasing]

Код:

#include <iostream>

int main() 
{
   alignas(int) char data[sizeof(int)];
   int *myInt = new (data) int;
   *myInt = 34;

   std::cout << *reinterpret_cast<int*>(data);
}

В этом случае неdata псевдоним int, и, следовательно, приведение его обратно к int не будет нарушать строгие правила псевдонимов? Или я что-то здесь упускаю?

Редактировать: странно, когда я определяюdata как это:

alignas(int) char* data = new char[sizeof(int)];

Предупреждение компилятора исчезает. Распределение стека имеет значение со строгим псевдонимом? Имеет ли тот факт, что этоchar[] и неchar* значит, это не может на самом деле псевдоним любого типа?

Ответы на вопрос(2)

Ваш ответ на вопрос