Não avaliar a expressão à qual sizeof é aplicado torna legal desreferenciar um ponteiro nulo ou inválido dentro de sizeof em C ++?

Primeiro de tudo, eu viesta pergunta sobre C99 e as referências de resposta aceitasoperando não é avaliado redação no rascunho da Norma C99. Não tenho certeza se esta resposta se aplica ao C ++ 03. Há tambémesta pergunta sobre C ++ que tenha uma resposta aceita citando uma redação semelhante e tambémEm alguns contextos, operandos não avaliados são exibidos. Um operando não avaliado não é avaliado. redação.

Eu tenho este código:

 int* ptr = 0;
 void* buffer = malloc( 10 * sizeof( *ptr ) );

A questão é - existe uma dereferência de ponteiro nulo (e, portanto, UB) dentrosizeof()?

C ++ 03 5.3.3 / 1 dizO operador sizeof gera o número de bytes na representação do objeto de seu operando. O operando é uma expressão que não é avaliada ou um p-id do tipo com ressentimento.

As respostas vinculadas às citações citam esse ou outro texto semelhante e fazem uso da parte "não é avaliada" para deduzir que não há UB.

No entanto, não consigo encontrar exatamente onde os links padrãoavaliação ter ou não ter UB neste caso.

"Não avaliar" a expressão à qual sizeof é aplicado torna legal desreferenciar um ponteiro nulo ou inválido dentro de sizeof em C ++?

questionAnswers(3)

yourAnswerToTheQuestion