use super::*; // Note(Lokathor): This is the neat part!! unsafe impl Zeroable for Option {} /// Trait for types which are [Zeroable](Zeroable) when wrapped in /// [Option](core::option::Option). /// /// ## Safety /// /// * `Option` must uphold the same invariants as /// [Zeroable](Zeroable). pub unsafe trait ZeroableInOption: Sized {} unsafe impl ZeroableInOption for NonZeroI8 {} unsafe impl ZeroableInOption for NonZeroI16 {} unsafe impl ZeroableInOption for NonZeroI32 {} unsafe impl ZeroableInOption for NonZeroI64 {} unsafe impl ZeroableInOption for NonZeroI128 {} unsafe impl ZeroableInOption for NonZeroIsize {} unsafe impl ZeroableInOption for NonZeroU8 {} unsafe impl ZeroableInOption for NonZeroU16 {} unsafe impl ZeroableInOption for NonZeroU32 {} unsafe impl ZeroableInOption for NonZeroU64 {} unsafe impl ZeroableInOption for NonZeroU128 {} unsafe impl ZeroableInOption for NonZeroUsize {} // Note: this does not create NULL vtable because we get `None` anyway. unsafe impl ZeroableInOption for NonNull {} unsafe impl ZeroableInOption for &'_ T {} unsafe impl ZeroableInOption for &'_ mut T {} #[cfg(feature = "extern_crate_alloc")] #[cfg_attr(feature = "nightly_docs", doc(cfg(feature = "extern_crate_alloc")))] unsafe impl ZeroableInOption for alloc::boxed::Box {}