¿Es legal eludir el constructor de una clase o resulta en un comportamiento indefinido?

Considere el siguiente código de muestra:

class C
{
public:
    int* x;
};

void f()
{
    C* c = static_cast<C*>(malloc(sizeof(C)));
    c->x = nullptr; // <-- here
}

Si tuviera que vivir con la memoria no inicializada por alguna razón (por supuesto, si es posible, llamaríanew C() en cambio), todavíapodría llame al constructor de colocación. Pero si omito esto, como arriba, e inicializocada variable de miembro manualmente, ¿da como resultado un comportamiento indefinido? Es decir. está eludiendo el comportamiento indefinido del constructor per se o es legal reemplazarlo llamando con algún código equivalente fuera de la clase?

(Encontré esto a través de otra pregunta sobre un asunto completamente diferente; pidiendo curiosidad ...)

Respuestas a la pregunta(6)

Su respuesta a la pregunta