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).
- The type must be inhabited (eg: no
Infallible).
- The type must allow any bit pattern (eg: no
bool
or char
, which have
illegal bit patterns).
- The type must not contain any 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.
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: 'static> Pod for *const T
impl<T: 'static> Pod for *mut T