Aliasing estrito de ponteiro: o acesso através de um ponteiro 'volátil' / referência é uma solução?

Na esteira deum problema específico, uma resposta automática e comentários, gostaria de entender se é uma solução adequada, solução alternativa / hack ou simplesmente errada.

Reescrevi especificamente o código:

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

Como:

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

com umvolatile qualificador para o ponteiro.

Vamos apenas assumir que o tratamentoT Comoint na minha situação faz sentido. Isso acessa através de umvolatile referência resolver o problema de aliasing de ponteiro?

Para uma referência, da especificação:

[Nota: volátil é uma dica para a implementação para evitar otimização agressiva envolvendo o objeto, porque o valor do objeto pode ser alterado por meios indetectáveis por uma implementação. Veja 1.9 para semântica detalhada. Em geral, a semântica de volátil deve ser a mesma em C ++ e em C. - nota final]

EDITAR:

O código acima resolveu meu problema pelo menos no GCC 4.5.

questionAnswers(2)

yourAnswerToTheQuestion