/// The provenance from pointers is *not* combined. The result must only be used to refer to the
/// or [`expose_provenance`][pointer::expose_provenance] and [`with_exposed_provenance`][with_exposed_provenance]
/// [Strict Provenance][crate::ptr#strict-provenance] APIs such as [`with_addr`][pointer::with_addr]
/// wherever possible, in which case [`addr`][pointer::addr] should be used instead of `expose_provenance`.
/// because all the bytes are dedicated to describing the address. Platforms which need to store
/// If the pointer may be null or the value may be uninitialized, [`as_uninit_ref`] must be used instead.
/// If the pointer may be null, but the value is known to have been initialized, [`as_ref`] must be used instead.
/// In other words, `let z = x.wrapping_offset((y as isize) - (x as isize))` does *not* make `z`
/// attached to the object `x` is attached to, and dereferencing it is Undefined Behavior unless
/// pointer is dereferenced when it is out-of-bounds of the object it is attached to. [`offset`]
/// `x.wrapping_offset(o).wrapping_offset(o.wrapping_neg())` is always the same as `x`. In other
/// Calculates the distance between two pointers within the same allocation. The returned value is in
/// * both be [derived from][crate::ptr#provenance] a pointer to the same [allocation], and the memory range between
/// runtime and may be exploited by optimizations. If you wish to compute the difference between
/// Calculates the distance between two pointers within the same allocation. The returned value is in
/// Calculates the distance between two pointers within the same allocation, *where it's known that
/// Calculates the distance between two pointers within the same allocation, *where it's known that
/// spuriously return `None` for pointers that later actually turn out to have its equality known.
/// rely on the result of this function for soundness. It is suggested to only use this function
/// spuriously return `None` for pointers that later actually turn out to have its inequality known.
/// rely on the result of this function for soundness. It is suggested to only use this function
/// * If the computed offset is non-zero, then `self` must be [derived from][crate::ptr#provenance] a pointer to some
/// This implies, for instance, that `vec.as_ptr().add(vec.len())` (for `vec: Vec<T>`) is always
/// attached to the object `x` is attached to, and dereferencing it is Undefined Behavior unless
/// attached to the object `x` is attached to, and dereferencing it is Undefined Behavior unless
/// The offset is expressed in number of `T` elements, and not bytes. The value returned can be
/// [undefined behavior]: https://doc.rust-lang.org/reference/behavior-considered-undefined.html
/// Pointer equality is by address, as produced by the [`<*const T>::addr`](pointer::addr) method.
/// Pointer comparison is by address, as produced by the `[`<*const T>::addr`](pointer::addr)` method.
/// Pointer comparison is by address, as produced by the `[`<*const T>::addr`](pointer::addr)` method.