Rusts std::ptr::NonNull
wraps a *mut
pointer. Sometimes this has implications that are not
desired. ConstPtr
wraps NullPtr
but removes the mutable and uninit API's. As consequence
it can only be constructed to point to a valid object (although it may become dangling when
the object becomes destroyed). This simplifies handling lifetime erased references because a
&reference
implicitly coerces to a *const pointer
and adds some safety net as in one can't
accidentally get a mutable reference to something that should been const.