Depuis P0593 La création implicite d'objets pour la manipulation d'objets de bas niveau a été acceptée, les objets peuvent maintenant être créés implicitement en C ++ 20.
Plus précisément, le libellé introduit par la proposition permet à certaines opérations (telles que std::malloc
) de créer et de démarrer automatiquement la durée de vie d’objets de certains types, appelés types à durée de vie implicite , si l’ introduction de tels objets entraînait un programme avec un comportement par ailleurs non défini. comportement défini. Voir [intro.object] / 10 .
Le projet indique maintenant en outre que s'il existe plusieurs ensembles de ces objets qui pourraient être créés implicitement pour donner au programme un comportement défini, il n'est pas spécifié lequel de ces ensembles est créé. (La phrase pertinente ne semble pas être présente dans la dernière révision de la proposition à laquelle j'ai pu accéder, R5, mais se trouve dans le projet de validation.)
Existe-t-il réellement un programme pour lequel ce choix d'ensemble d'objets créés implicitement est observable? En d'autres termes, existe-t-il un programme avec un comportement défini, mais non spécifié, à travers cette nouvelle règle, de sorte qu'il est possible de déduire de la sortie quels ensembles de types d'objets implicites (sur plus d'un possible) ont été créés?
Ou cette phrase était-elle simplement destinée à clarifier l'exécution du programme sur la machine abstraite (sans impact observable)?
std::malloc
), Sinon vous rencontrez des problèmes avec la définition étant récursivement dépendant de l'avenir.