Стандарт полностью не указан в этом случае, и я не могу найти соответствующую проблему CWG.
Само по себе ваше новое размещение не UB.В конце концов, у вас есть хранилище без объекта, поэтому вы можете напрямую создать в нем объект.Как вы правильно сказали, время жизни первого объекта еще не началось.
Но теперь проблема в том, что происходит с исходным объектом?Потому что обычно конструктор вызывается только в хранилище без объекта, а конец конструктора отмечает начало времени жизни объекта.Но сейчас уже есть другой объект.Новый объект уничтожен?Это не имеет никакого эффекта?
В стандарте отсутствует абзац в [class.cdtor], в котором говорится, что должно произойти, если новый объект создается в хранилище строящегося и уничтожаемого объекта.
Вы можете даже построить еще более странный код:
struct X {
X *object;
int var;
X() : object(new (this) X(4)), var(5) {} // ?!?
X(int x) : var(x) {}
} x;