Da P0593 die implizite Erstellung von Objekten für die Objektmanipulation auf niedriger Ebene akzeptiert wurde, können Objekte jetzt implizit in C ++ 20 erstellt werden.
Insbesondere ermöglicht der durch den Vorschlag eingeführte Wortlaut, dass bestimmte Vorgänge (z. B. std::malloc
) automatisch die Lebensdauer von Objekten bestimmter Typen, sogenannte implizite Lebensdauer-Typen , erstellen und starten , wenn die Einführung solcher Objekte dazu führen würde, dass ein Programm mit ansonsten undefiniertem Verhalten vorliegt definiertes Verhalten. Siehe [intro.object] / 10 .
Der Entwurf besagt nun weiter, dass, wenn es mehrere Sätze solcher Objekte gibt, die implizit erstellt werden könnten, um dem Programm ein definiertes Verhalten zu verleihen, nicht angegeben ist, welcher dieser Sätze erstellt wird. (Der relevante Satz scheint in der letzten Überarbeitung des Vorschlags, auf die ich zugreifen konnte, R5, nicht vorhanden zu sein, befindet sich jedoch im Entwurf des Commits.)
Gibt es tatsächlich ein Programm, für das diese Auswahl implizit erstellter Objektmengen beobachtbar ist? Mit anderen Worten, gibt es ein Programm mit definiertem, aber nicht spezifiziertem Verhalten durch diese neue Regel, so dass aus der Ausgabe geschlossen werden kann, welche Arten von impliziten Objekttypen (aus mehr als einem möglichen) erstellt wurden?
Oder sollte dieser Satz lediglich die Programmausführung auf der abstrakten Maschine verdeutlichen (ohne beobachtbare Auswirkungen)?
std::malloc
) erfolgt, da sonst Probleme mit der Definition auftreten rekursiv abhängig von der Zukunft.