¿Al no evaluar la expresión a la que se aplica sizeof, es legal desreferenciar un puntero nulo o no válido dentro de sizeof en C ++?

Primero que nada, he vistoesta pregunta sobre C99 y las referencias de respuesta aceptadasel operando no se evalúa redacción en el borrador del Estándar C99. No estoy seguro de que esta respuesta se aplique a C ++ 03. También hayesta pregunta sobre C ++ que tiene una respuesta aceptada citando una redacción similar y tambiénEn algunos contextos, aparecen operandos no evaluados. Un operando no evaluado no se evalúa. fraseología.

Tengo este codigo:

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

La pregunta es: ¿hay una desreferencia de puntero nula (y, por lo tanto, UB) dentrosizeof()?

C ++ 03 5.3.3 / 1 diceEl operador sizeof produce el número de bytes en la representación del objeto de su operando. El operando es una expresión, que no se evalúa, o una p, ID de tipo sin sintetizar.

Los enlaces a las respuestas citan este texto u otro similar y hacen uso de la parte "no evaluado" para deducir que no hay UB.

Sin embargo, no puedo encontrar exactamente dónde se vincula el estándarevaluación tener o no tener UB en este caso.

¿"No evaluar" la expresión a la que se aplica sizeof hace legal desreferenciar un puntero nulo o no válido dentro de sizeof en C ++?

Respuestas a la pregunta(3)

Su respuesta a la pregunta