Является ли ссылка на объект действительной после его уничтожения и воссоздания на месте?

что произойдет со ссылкой на объект после уничтожения и создания вместо этого объекта? Будет ли это все еще действительным или это поведение undefined? Вот пример:

#include <iostream>

class A
{
    int var;

public:
    A(int var) : var(var) {}

    void foo()
    {
        std::cout << var;
    }
};

A obj(5);

void main()
{
    A& ref = obj;
    obj.~A();
    new (&obj) A(6);
    
    ref.foo();  // is this valid?
}

person legier    schedule 25.03.2021    source источник
comment
Указано в timsong-cpp.github.io/cppwp/n4861/basic. life#8, и вполне вероятно, что подобные вопросы уже задавались ранее.   -  person Language Lawyer    schedule 25.03.2021
comment
Цвет меня удивил. Я ожидаю, что это сработает, но будет технически незаконным. Приятно видеть, что Стандарт канонизирует его с относительно коротким списком предостережений.   -  person user4581301    schedule 25.03.2021