Strict Pointer Aliasing: Ist der Zugriff über einen 'flüchtigen' Zeiger / Verweis eine Lösung?

uf den Fersen v ein spezifisches Problem, eine Selbstantwort und Kommentare dazu, ich würde gerne verstehen, ob es sich um eine richtige Lösung handelt, um einen Workaround / Hack oder einfach nur falsch.

Insbesondere habe ich Code umgeschrieben:

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

Wie

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

mit einervolatile Qualifier auf den Zeiger.

Lassen Sie uns einfach annehmen, dass die Behandlung vonT wieint in meiner Situation macht Sinn. Geht dies über einvolatile Referenz Zeiger-Aliasing-Problem lösen?

Für eine Referenz aus der Spezifikation:

[Hinweis: Volatile ist ein Hinweis auf die Implementierung, um eine aggressive Optimierung des Objekts zu vermeiden, da der Wert des Objekts möglicherweise von einer Implementierung nicht erkannt werden kann. Ausführliche Informationen zur Semantik finden Sie unter 1.9. Im Allgemeinen soll die Semantik von volatile in C ++ dieselbe sein wie in C. - Endnote]

BEARBEITEN

Der obige Code hat mein Problem zumindest in GCC 4.5 gelöst.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage