Como a criação implícita de objetos P0593 para manipulação de objetos de baixo nível foi aceita, agora os objetos podem ser criados implicitamente no C ++ 20.
Especificamente, o texto introduzido pela proposta permite que certas operações (como std::malloc
) criem e iniciem automaticamente a vida útil de objetos de certos tipos, os chamados tipos de vida implícita , se a introdução de tais objetos fizer com que um programa com comportamento indefinido tenha comportamento definido. Veja [intro.object] / 10 .
O rascunho agora afirma ainda que, se houver vários conjuntos desses objetos que possam ser criados implicitamente para fornecer ao programa o comportamento definido, não será especificado qual desses conjuntos será criado. (A frase relevante parece não estar presente na última revisão da proposta que eu pude acessar, R5, mas está no rascunho do commit.)
Existe realmente um programa para o qual essa escolha do conjunto de objetos criado implicitamente é observável? Em outras palavras, existe um programa com comportamento definido, mas não especificado, por meio dessa nova regra, de modo que é possível inferir a partir da saída que conjuntos de tipos de objetos implícitos (dentre mais de um possível) foram criados?
Ou essa frase foi apenas para esclarecer a execução do programa na máquina abstrata (sem impacto observável)?
std::malloc
), caso contrário, você terá problemas com a definição sendo recursivamente dependendo do futuro.