1 // SPDX-License-Identifier: GPL-2.0-or-later 2 3 //! Defines a trait for structs that can be safely initialized with zero bytes. 4 5 /// Encapsulates the requirement that 6 /// `MaybeUninit::<Self>::zeroed().assume_init()` does not cause undefined 7 /// behavior. 8 /// 9 /// # Safety 10 /// 11 /// Do not add this trait to a type unless all-zeroes is a valid value for the 12 /// type. In particular, raw pointers can be zero, but references and 13 /// `NonNull<T>` cannot. 14 pub unsafe trait Zeroable: Default { 15 /// Return a value of Self whose memory representation consists of all 16 /// zeroes, with the possible exclusion of padding bytes. 17 const ZERO: Self = unsafe { ::core::mem::MaybeUninit::<Self>::zeroed().assume_init() }; 18 } 19