/// Marker trait for "plain old data". /// /// The point of this trait is that once something is marked "plain old data" /// you can really go to town with the bit fiddling and bit casting. Therefore, /// it's a relatively strong claim to make about a type. Do not add this to your /// type casually. /// /// **Reminder:** The results of casting around bytes between data types are /// _endian dependant_. Little-endian machines are the most common, but /// big-endian machines do exist (and big-endian is also used for "network /// order" bytes). /// /// ## Safety /// /// * The type must be inhabited (eg: no /// [Infallible](core::convert::Infallible)). /// * The type must allow any bit pattern (eg: no `bool` or `char`, which have /// illegal bit patterns). /// * The type must not contain any uninit (or padding) bytes, either in the /// middle or on the end (eg: no `#[repr(C)] struct Foo(u8, u16)`, which has /// padding in the middle, and also no `#[repr(C)] struct Foo(u16, u8)`, which /// has padding on the end). /// * The type needs to have all fields also be `Pod`. /// * The type needs to be `repr(C)` or `repr(transparent)`. In the case of /// `repr(C)`, the `packed` and `align` repr modifiers can be used as long as /// all other rules end up being followed. /// * It is disallowed for types to contain pointer types, `Cell`, `UnsafeCell`, /// atomics, and any other forms of interior mutability. /// * More precisely: A shared reference to the type must allow reads, and /// *only* reads. RustBelt's separation logic is based on the notion that a /// type is allowed to define a sharing predicate, its own invariant that must /// hold for shared references, and this predicate is the reasoning that allow /// it to deal with atomic and cells etc. We require the sharing predicate to /// be trivial and permit only read-only access. pubunsafetrait Pod: Zeroable + Copy + 'static {}
unsafeimpl Pod for () {} unsafeimpl Pod for u8 {} unsafeimpl Pod for i8 {} unsafeimpl Pod for u16 {} unsafeimpl Pod for i16 {} unsafeimpl Pod for u32 {} unsafeimpl Pod for i32 {} unsafeimpl Pod for u64 {} unsafeimpl Pod for i64 {} unsafeimpl Pod for usize {} unsafeimpl Pod for isize {} unsafeimpl Pod for u128 {} unsafeimpl Pod for i128 {} #[cfg(feature = "nightly_float")] unsafeimpl Pod for f16 {} unsafeimpl Pod for f32 {} unsafeimpl Pod for f64 {} #[cfg(feature = "nightly_float")] unsafeimpl Pod for f128 {} unsafeimpl<T: Pod> Pod for Wrapping<T> {}
#[cfg(feature = "pod_saturating")] unsafeimpl<T: Pod> Pod for core::num::Saturating<T>{}
#[cfg(feature = "unsound_ptr_pod_impl")] #[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "unsound_ptr_pod_impl"))
)] unsafeimpl<T: 'static> Pod for *mut T {} #[cfg(feature = "unsound_ptr_pod_impl")] #[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "unsound_ptr_pod_impl"))
)] unsafeimpl<T: 'static> Pod for *const T {} #[cfg(feature = "unsound_ptr_pod_impl")] #[cfg_attr(
feature = "nightly_docs",
doc(cfg(feature = "unsound_ptr_pod_impl"))
)] unsafeimpl<T: 'static> PodInOption for NonNull<T> {}
unsafeimpl<T: ?Sized + 'static> Pod for PhantomData<T> {} unsafeimpl Pod for PhantomPinned {} unsafeimpl<T: Pod> Pod for core::mem::ManuallyDrop<T> {}
// Note(Lokathor): MaybeUninit can NEVER be Pod.
#[cfg(feature = "min_const_generics")] #[cfg_attr(feature = "nightly_docs", doc(cfg(feature = "min_const_generics")))] unsafeimpl<T, const N: usize> Pod for [T; N] where T: Pod {}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.