Mithilfe von std :: launder einen Zeiger auf ein aktives Objektelement von einem Zeiger auf ein inaktives Objekt abrufen?

8

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.

    
Oliv 10.01.2018, 13:55
quelle

0 Antworten