J'utilise un code où je lance un enum* int*. Quelque chose comme ceci:
enum foo { ... }
...
foo foobar;
int *pi = reinterpret_cast<int*>(&foobar);
Lors de la compilation du code g++ 4.1.2), j'obtiens le message d'avertissement suivant:
dereferencing type-punned pointer will break strict-aliasing rules
J'ai googlé ce message, et constaté qu'il ne se produit que lorsque la stricte aliasing optimisation est sur. J'ai les questions suivantes:
- Si je laisse le code de cet avertissement, il va générer potentiellement mauvais code?
- Est-il possible de contourner ce problème?
- Si il n'y en a pas, est-il possible de désactiver stricte de l'aliasing à partir de l'intérieur du fichier source (parce que je ne veux pas le désactiver pour tous les fichiers source et je ne veux pas faire un autre Makefile règle pour ce fichier source)?
Et oui, j'ai réellement besoin de ce type de lissage.