pub unsafe trait Unaligned { }
Expand description
Types with no alignment requirement.
WARNING: Do not implement this trait yourself! Instead, use
#[derive(Unaligned)]
(requires the derive
Cargo feature).
If T: Unaligned
, then align_of::<T>() == 1
.
Safety
This section describes what is required in order for T: Unaligned
, and
what unsafe code may assume of such types. #[derive(Unaligned)]
only
permits types which satisfy these requirements. If you don’t plan on
implementing Unaligned
manually, and you don’t plan on writing unsafe code
that operates on Unaligned
types, then you don’t need to read this
section.
If T: Unaligned
, then unsafe code may assume that it is sound to produce a
reference to T
at any memory location regardless of alignment. If a type
is marked as Unaligned
which violates this contract, it may cause
undefined behavior.
Implementations on Foreign Types§
impl Unaligned for Option<NonZeroI8>
impl Unaligned for Option<NonZeroU8>
impl Unaligned for bool
impl Unaligned for i8
impl Unaligned for str
impl Unaligned for u8
impl Unaligned for ()
impl Unaligned for NonZeroI8
impl Unaligned for NonZeroU8
impl<T: Unaligned> Unaligned for [T]
impl<T: Unaligned> Unaligned for Wrapping<T>
impl<T: Unaligned> Unaligned for MaybeUninit<T>
impl<T: ?Sized + Unaligned> Unaligned for ManuallyDrop<T>
impl<T: ?Sized> Unaligned for PhantomData<T>
impl<const N: usize, T: Unaligned> Unaligned for [T; N]
Implementors§
impl<O> Unaligned for F32<O>
byteorder
only.impl<O> Unaligned for F64<O>
byteorder
only.impl<O> Unaligned for I16<O>
byteorder
only.impl<O> Unaligned for I32<O>
byteorder
only.impl<O> Unaligned for I64<O>
byteorder
only.impl<O> Unaligned for I128<O>
byteorder
only.impl<O> Unaligned for U16<O>
byteorder
only.impl<O> Unaligned for U32<O>
byteorder
only.impl<O> Unaligned for U64<O>
byteorder
only.impl<O> Unaligned for U128<O>
byteorder
only.