/// Trait for types that can be dropped (which is all of them).
///
/// This trait exists solely as a workaround for the fact that only types with an explicit `Drop`
/// implementation implement `Drop`, even though all types _can_ be dropped. We want to store
/// the equivalent of `Box<dyn Drop>` when objects are retired, but can't do that since not every
/// type is `Drop`. This trait is effectively the same as `Drop` (every trait implies `Drop`), and
/// has a blanket implementation for any type, so can be used instead of `dyn Drop`.
///
/// See also https://github.com/rust-lang/rust/issues/86653 and
/// https://github.com/rust-lang/rust/pull/86747.
/// A type that can be turned into, and converted from, a raw pointer whose referent is `T`.
///
/// # Safety
///
/// 1. the `*mut T` returned from `into_raw` must be valid as a `&mut T` when it is returned.
/// 2. the `*mut T` returned from `into_raw` must remain valid as a `&T` until it is passed to
/// `from_raw`.
/// 3. `from_raw` must not return a particular `*mut T` again until the provided `self` is dropped
/// after an eventual call to `from_raw`.
pub unsafe
unsafe