Diese Frage folgt diesem one
Betrachten wir diesen Beispielcode:
%Vor% Wenn short_str
nicht das aktive Mitglied ist, das den Zeiger dereferenziert ohne std::launder
wäre UB. Nehmen wir an, dass die ABI gut spezifiziert ist und wir wissen, dass size_r [7] dieselbe Adresse hat wie short_str [15]. Gibt std::launder(short_str+15)
einen Zeiger auf size_r[7]
zurück, wenn short_str
nicht das aktive Mitglied der Union ist?
Nota: Ich denke, das ist der Fall, weil [ptr.launder] / 3
Ein Speicherbyte ist über einen Zeigerwert erreichbar, der auf ein Objekt Y zeigt, wenn es innerhalb des von Y belegten Speichers liegt, ein Objekt, das mit Y interpolierbar ist, oder das unmittelbar einschließende Array-Objekt, wenn Y ein ist Array-Element.
Tags und Links c++ pointers language-lawyer c++17 union