a sequence of elements in an array of narrow character
type ([basic.fundamental]), where the size and alignment of the sequence
match those of some object pointer type.
the value returned by a call to the C++ standard library implementation of
::operator new(std::size_t) or
::operator new(std::size_t, std::align_val_t);40
the result of taking the address of an object (or one of its
subobjects) designated by an lvalue resulting from indirection
through a safely-derived pointer value;
the value of an object whose value was copied from a traceable pointer object,
where at the time of the copy the source object contained a copy of a safely-derived
pointer value.
the value of an object whose value was copied from a traceable pointer object,
where at the time of the copy the source object contained an integer representation of a
safely-derived pointer value;
the result of an additive or bitwise operation, one of whose operands is an
integer representation of a safely-derived pointer value P, if that result
converted by reinterpret_cast<void*> would compare equal to a safely-derived
pointer computable from reinterpret_cast<void*>(P).
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]).