Verstößt dies wirklich gegen strenge Aliasing-Regeln?

Wenn ich diesen Beispielcode mit g ++ kompiliere, wird folgende Warnung angezeigt:

Warnung: Die Dereferenzierung von typgesteuerten Zeigern verstößt gegen strenge Aliasing-Regeln.[-Wstrict-aliasing]

Der Code

#include <iostream>

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

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

In diesem Fall nichtdata alias ein int, und daher würde das Zurücksetzen auf ein int nicht gegen strenge Aliasing-Regeln verstoßen? Oder fehlt mir hier etwas?

Edit: Seltsam, wenn ich @ definiedata so was

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

Die Compiler-Warnung verschwindet. Unterscheidet sich die Stapelzuordnung bei striktem Aliasing? Ist die Tatsache, dass es ein @ ichar[] und keinchar* meine, es kann eigentlich keinen Alias-Typ haben?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage