Annex F (informative) Core undefined behavior [ub]

F.2 [basic]: Basics [ub.basic]

F.2.4[ub:lifetime.outside.pointer.delete]
Specified in: [basic.life]

For a pointer pointing to an object outside of its lifetime, behavior is undefined if the object will be or was of a class type with a non-trivial destructor and the pointer is used as the operand of a delete-expression.
[Example 1: struct S { float f = 0; ~S() {} }; void f() { S* p = new S; p->~S(); delete p; // undefined behavior, operand of delete, lifetime has ended and S // has a non-trivial destructor } — end example]