Завершает ли вызов тривиальный деструктор время жизни объекта? Я прочитал это и это , но не нашел хорошего объяснения. Эти потоки утверждают, что тривиальный вызов деструктора не имеет никакого эффекта, а код типа struct A { int x; } a; a.~A(); a.~A();
допустим. Но я нашел этот пример в стандарте:
struct C { };
void f() {
C * pc = new C;
using C2 = C;
pc->C::~C2(); // OK, destroys *pc
C().C::~C(); // undefined behavior: temporary of type C destroyed twice
using T = int;
0 .T::~T(); // OK, no effect
0.T::~T(); // error: 0.T is a user-defined-floating-point-literal (5.13.8)
}
Здесь C имеет тривиальный деструктор, но двойное уничтожение объекта типа C имеет неопределенное поведение?