Como P0593 se ha aceptado la creación implícita de objetos para la manipulación de objetos de bajo nivel , los objetos ahora se pueden crear implícitamente en C ++ 20.
Específicamente, la redacción introducida por la propuesta permite que ciertas operaciones (como std::malloc
) creen y comiencen automáticamente la vida útil de los objetos de ciertos tipos, los llamados tipos de vida útil implícita , si la introducción de tales objetos ocasionaría que un programa con un comportamiento indefinido comportamiento definido Ver [intro.object] / 10 .
El borrador ahora establece además que si hay múltiples conjuntos de tales objetos que podrían crearse implícitamente para dar al programa un comportamiento definido, no se especifica cuál de estos conjuntos se crea. (La oración relevante no parece estar presente en la última revisión de la propuesta a la que pude acceder, R5, pero está en el borrador del compromiso).
¿Existe realmente un programa para el cual esta elección de conjunto de objetos creado implícitamente sea observable? En otras palabras, ¿existe un programa con un comportamiento definido, pero no especificado, a través de esta nueva regla, de modo que sea posible inferir a partir de la salida qué conjuntos de tipos de objetos implícitos (de más de uno posible) se crearon?
¿O fue esta oración simplemente destinada a aclarar la ejecución del programa en la máquina abstracta (sin impacto observable)?
std::malloc
), de lo contrario, obtendrá problemas con la definición siendo recursivamente dependiendo del futuro.