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?