Poiché P0593 è stata accettata la creazione implicita di oggetti per la manipolazione di oggetti di basso livello , ora gli oggetti possono essere creati implicitamente in C ++ 20.
In particolare, la formulazione introdotta dalla proposta consente a determinate operazioni (come std::malloc
) di creare e avviare automaticamente la durata di oggetti di determinati tipi, i cosiddetti tipi di vita implicita , se l' introduzione di tali oggetti provocherebbe un programma con un comportamento altrimenti indefinito comportamento definito. Vedi [intro.object] / 10 .
La bozza ora afferma inoltre che se ci sono più insiemi di tali oggetti che potrebbero essere creati in modo implicito per dare il comportamento definito dal programma, non è specificato quale di questi insiemi viene creato. (La frase pertinente non sembra essere presente nell'ultima revisione della proposta a cui ho potuto accedere, R5, ma è nel progetto di commit.)
Esiste davvero un programma per il quale è osservabile questa scelta di insiemi di oggetti creati implicitamente? In altre parole, esiste un programma con un comportamento definito, ma non specificato, attraverso questa nuova regola, in modo che sia possibile dedurre dall'output quali serie di tipi di oggetti impliciti (tra più di uno possibile) sono stati creati?
O questa frase intendeva semplicemente chiarire l'esecuzione del programma sulla macchina astratta (senza impatto osservabile)?
std::malloc
), altrimenti si verificano problemi con la definizione essere ricorsivamente a seconda del futuro.