From [basic#life-6], it is not fully clear what happens when the condition is not satisfied. Here is the original text from the standard which defines condition when it is still possible to use original pointer in **limited cases**.
Before the lifetime of an object has started but after the storage which the object will occupy has been allocated or, after the lifetime of an object has ended and before the storage which the object occupied is reused or released, any pointer that represents the address of the storage location where the object will be or was located may be used but only in limited ways
. Otherwise, such a pointer refers to allocated storage (
[basic.stc.dynamic.allocation]), and using the pointer as if the pointer were of type
void* is well-defined
. Indirection through such a pointer is permitted but the resulting lvalue may only be used in limited ways, as described below
. The program has undefined behavior if
However it is not clear how the original pointer can be used if the condition is not satisfied. I've put an example below where the storage is definitely re-used. Does it mean that any use of the original pointer which represents the storage is undefined behavior?