pub unsafe trait Pod:
Zeroable
+ Copy
+ 'static { }Expand description
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).
- The type must allow any bit pattern (eg: no
boolorchar, 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)orrepr(transparent). In the case ofrepr(C), thepackedandalignrepr 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.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.
Implementations on Foreign Types§
impl Pod for f32
impl Pod for f64
impl Pod for i8
impl Pod for i16
impl Pod for i32
impl Pod for i64
impl Pod for i128
impl Pod for isize
impl Pod for u8
impl Pod for u16
impl Pod for u32
impl Pod for u64
impl Pod for u128
impl Pod for ()
impl Pod for usize
impl Pod for float64x1_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float64x1x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float64x1x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float64x1x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float64x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float64x2x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float64x2x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float64x2x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float32x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float32x2x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float32x2x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float32x2x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float32x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float32x4x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float32x4x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for float32x4x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int8x8_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int8x8x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int8x8x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int8x8x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int8x16_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int8x16x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int8x16x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int8x16x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int16x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int16x4x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int16x4x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int16x4x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int16x8_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int16x8x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int16x8x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int16x8x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int32x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int32x2x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int32x2x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int32x2x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int32x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int32x4x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int32x4x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int32x4x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int64x1_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int64x1x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int64x1x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int64x1x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int64x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int64x2x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int64x2x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for int64x2x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly8x8_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly8x8x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly8x8x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly8x8x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly8x16_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly8x16x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly8x16x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly8x16x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly16x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly16x4x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly16x4x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly16x4x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly16x8_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly16x8x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly16x8x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly16x8x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly64x1_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly64x1x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly64x1x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly64x1x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly64x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly64x2x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly64x2x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for poly64x2x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint8x8_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint8x8x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint8x8x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint8x8x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint8x16_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint8x16x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint8x16x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint8x16x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint16x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint16x4x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint16x4x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint16x4x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint16x8_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint16x8x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint16x8x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint16x8x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint32x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint32x2x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint32x2x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint32x2x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint32x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint32x4x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint32x4x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint32x4x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint64x1_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint64x1x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint64x1x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint64x1x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint64x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint64x2x2_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint64x2x3_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for uint64x2x4_t
Available on AArch64 and crate feature
aarch64_simd only.impl Pod for PhantomPinned
impl Pod for bf16
impl Pod for f16
impl Pod for b8
impl Pod for b16
impl Pod for b32
impl Pod for b64
impl Pod for c32x2
impl Pod for c32x4
impl Pod for c32x8
impl Pod for c64x1
impl Pod for c64x2
impl Pod for c64x4
impl Pod for f32x4
impl Pod for f32x8
impl Pod for f32x16
impl Pod for f64x2
impl Pod for f64x4
impl Pod for f64x8
impl Pod for i8x16
impl Pod for i8x32
impl Pod for i8x64
impl Pod for i16x8
impl Pod for i16x16
impl Pod for i16x32
impl Pod for i32x4
impl Pod for i32x8
impl Pod for i32x16
impl Pod for i64x2
impl Pod for i64x4
impl Pod for i64x8
impl Pod for m8
impl Pod for m8x16
impl Pod for m8x32
impl Pod for m8x64
impl Pod for m16
impl Pod for m16x8
impl Pod for m16x16
impl Pod for m16x32
impl Pod for m32
impl Pod for m32x4
impl Pod for m32x8
impl Pod for m32x16
impl Pod for m64
impl Pod for m64x2
impl Pod for m64x4
impl Pod for m64x8
impl Pod for u8x16
impl Pod for u8x32
impl Pod for u8x64
impl Pod for u16x8
impl Pod for u16x16
impl Pod for u16x32
impl Pod for u32x4
impl Pod for u32x8
impl Pod for u32x16
impl Pod for u64x2
impl Pod for u64x4
impl Pod for u64x8
impl<T> Pod for Option<T>where
T: PodInOption,
impl<T> Pod for [T; 0]where
T: Pod,
impl<T> Pod for [T; 1]where
T: Pod,
impl<T> Pod for [T; 2]where
T: Pod,
impl<T> Pod for [T; 3]where
T: Pod,
impl<T> Pod for [T; 4]where
T: Pod,
impl<T> Pod for [T; 5]where
T: Pod,
impl<T> Pod for [T; 6]where
T: Pod,
impl<T> Pod for [T; 7]where
T: Pod,
impl<T> Pod for [T; 8]where
T: Pod,
impl<T> Pod for [T; 9]where
T: Pod,
impl<T> Pod for [T; 10]where
T: Pod,
impl<T> Pod for [T; 11]where
T: Pod,
impl<T> Pod for [T; 12]where
T: Pod,
impl<T> Pod for [T; 13]where
T: Pod,
impl<T> Pod for [T; 14]where
T: Pod,
impl<T> Pod for [T; 15]where
T: Pod,
impl<T> Pod for [T; 16]where
T: Pod,
impl<T> Pod for [T; 17]where
T: Pod,
impl<T> Pod for [T; 18]where
T: Pod,
impl<T> Pod for [T; 19]where
T: Pod,
impl<T> Pod for [T; 20]where
T: Pod,
impl<T> Pod for [T; 21]where
T: Pod,
impl<T> Pod for [T; 22]where
T: Pod,
impl<T> Pod for [T; 23]where
T: Pod,
impl<T> Pod for [T; 24]where
T: Pod,
impl<T> Pod for [T; 25]where
T: Pod,
impl<T> Pod for [T; 26]where
T: Pod,
impl<T> Pod for [T; 27]where
T: Pod,
impl<T> Pod for [T; 28]where
T: Pod,
impl<T> Pod for [T; 29]where
T: Pod,
impl<T> Pod for [T; 30]where
T: Pod,
impl<T> Pod for [T; 31]where
T: Pod,
impl<T> Pod for [T; 32]where
T: Pod,
impl<T> Pod for [T; 48]where
T: Pod,
impl<T> Pod for [T; 64]where
T: Pod,
impl<T> Pod for [T; 96]where
T: Pod,
impl<T> Pod for [T; 128]where
T: Pod,
impl<T> Pod for [T; 256]where
T: Pod,
impl<T> Pod for [T; 512]where
T: Pod,
impl<T> Pod for [T; 1024]where
T: Pod,
impl<T> Pod for [T; 2048]where
T: Pod,
impl<T> Pod for [T; 4096]where
T: Pod,
impl<T> Pod for PhantomData<T>where
T: 'static + ?Sized,
impl<T> Pod for ManuallyDrop<T>where
T: Pod,
impl<T> Pod for Wrapping<T>where
T: Pod,
impl<T> Pod for Complex<T>where
T: Pod,
Available on crate feature
bytemuck only.