Alias de puntero estricto: ¿el acceso a través de un puntero / referencia 'volátil' es una solución?

En los talones deun problema específico, una respuesta propia y comentarios al respecto, me gustaría entender si es una solución adecuada, solución / piratería o simplemente está mal.

Específicamente, reescribí el código:

T x = ...;
if (*reinterpret_cast <int*> (&x) == 0)
  ...

Como:

T x = ...;
if (*reinterpret_cast <volatile int*> (&x) == 0)
  ...

con unvolatile calificador al puntero.

Asumamos que tratarT comoint En mi situación tiene sentido. ¿Esto accede a través de unvolatile referencia resolver problema de alias de puntero?

Para una referencia, de la especificación:

[Nota: volátil es un indicio de la implementación para evitar una optimización agresiva que involucre al objeto porque el valor del objeto podría modificarse de manera indetectable por una implementación. Ver 1.9 para semántica detallada. En general, la semántica de los volátiles está destinada a ser la misma en C ++ que en C. - nota final]

EDITAR:

El código anterior resolvió mi problema al menos en GCC 4.5.

Respuestas a la pregunta(2)

Su respuesta a la pregunta