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
pointer value
. Alternatively, an implementation may have
strict pointer
safety, 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
reachable (
[util.dynamic.safety])
. [
Note 1:
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]
It is
implementation-defined whether an implementation has relaxed or strict pointer safety
.