An implementation may have relaxed pointer safety
, in which case the
validity of a pointer value does not depend on whether it is a safely-derived
Alternatively, an implementation may have strict pointer
, in which case a pointer value referring to an object with dynamic
storage duration that is not a safely-derived pointer
value is an invalid pointer value unless
the referenced complete object has previously been declared
The effect of using an invalid pointer value (including passing it to a
deallocation function) is undefined, see [basic.stc].
This is true even if the unsafely-derived pointer value might compare equal to
some safely-derived pointer value.
— end note
implementation-defined whether an implementation has relaxed or strict pointer safety.