Что происходит с подобъектами скалярного типа после уничтожения объекта?

Рассмотрим этот код (для разных значенийrenew а такжеcleanse):

struct T {
    int mem;
    T() { }
    ~T() { mem = 42; }
};

// identity functions, 
// but breaks any connexion between input and output
int &cleanse_ref(int &r) {
    int *volatile pv = &r; // could also use cin/cout here
    return *pv;
}

void foo () {
    T t;
    int &ref = t.mem;
    int &ref2 = cleanse ? cleanse_ref(ref) : ref;
    t.~T();
    if (renew)
        new (&t) T;
    assert(ref2 == 42);
    exit(0);
}

Этоassert гарантированно пройти?

Я понимаю, что этот стильnot рекомендуемые.Opinions как "это не правильная практика" являютсяnot здесь интерес

Я хочу ответ, показывающийcomplete logical proof from standard quotes, Мнение авторов компиляторов также может быть интересным.

РЕДАКТИРОВАТЬ: теперь с двумя вопросами в одном! Увидетьrenew параметр (сrenew == 0это оригинальный вопрос).

РЕДАКТИРОВАТЬ 2: Я думаю, мой вопрос на самом деле: что такое объект члена?

РЕДАКТИРОВАТЬ 3: теперь с другимcleanse параметр!

Ответы на вопрос(2)

Ваш ответ на вопрос