Ответ 1
Нет, это UB. Вы не можете запустить время жизни объекта в неизмененной памяти. Из [basic.life] p1
Время жизни объекта типа T начинается, когда:
хранения с надлежащим выравниванием и размером для типа T, и
если объект имеет непустую инициализацию, его инициализация завершена,
[...]
Таким образом, в вашем примере время жизни объекта, на которое ссылается x
, даже не начинается, поэтому любое другое его использование, кроме упомянутого в [basic.life] p6, - UB.
Но то, что позволяет ваша реализация, - это сказать, что неизмененная память (как указано в используемой базовой архитектуре) фактически выровнена, что делает ваш код действительным в абстрактной машине C++. Я не уверен, что любой компилятор делает это, однако.