Utilizo un código donde lanzo una enumeración * a int *. Algo como esto:"desreferencia puntero tipo punteado romperá reglas de alias estricto" advertencia
enum foo { ... }
...
foo foobar;
int *pi = reinterpret_cast<int*>(&foobar);
Al compilar el código (g ++ 4.1.2), me sale el siguiente mensaje de advertencia:
dereferencing type-punned pointer will break strict-aliasing rules
Googled este mensaje, y encontró que sólo ocurre cuando aliasing estricta la optimización está activada Tengo las siguientes preguntas:
- Si dejo el código con esta advertencia, ¿generará un código potencialmente incorrecto?
- ¿Hay alguna forma de evitar este problema?
- Si no existe, ¿es posible desactivar el alias estricto desde el archivo de origen (porque no quiero desactivarlo para todos los archivos de origen y no quiero crear una regla de Makefile separada para este archivo fuente)?
Y sí, realmente necesito este tipo de aliasing.
¿Por qué no simplemente 'static_cast (foobar)'? –
GManNickG
Parece que esta [respuesta] (http://stackoverflow.com/questions/98650/what-is-the-strict-aliasing-rule/99010#99010) tiene lo que estás buscando. –