use core::convert::Infallible;
use core::mem::{ManuallyDrop, MaybeUninit};
use core::num::{NonZero, Saturating, Wrapping};
use core::ptr::NonNull;
#[cfg(target_arch = "x86")]
use core::arch::x86::{
__m128,
__m128bh,
__m128d,
__m128i,
__m256,
__m256bh,
__m256d,
__m256i,
__m512,
__m512bh,
__m512d,
__m512i,
};
#[cfg(target_arch = "x86_64")]
use core::arch::x86_64::{
__m128,
__m128bh,
__m128d,
__m128i,
__m256,
__m256bh,
__m256d,
__m256i,
__m512,
__m512bh,
__m512d,
__m512i,
};
pub unsafe trait Immutable {}
unsafe impl<T: Immutable, const N: usize> Immutable for [T; N] {}
unsafe impl Immutable for char {}
#[cfg(feature = "f128")]
unsafe impl Immutable for f128 {}
#[cfg(feature = "f16")]
unsafe impl Immutable for f16 {}
unsafe impl Immutable for f32 {}
unsafe impl Immutable for f64 {}
unsafe impl Immutable for i128 {}
unsafe impl Immutable for i16 {}
unsafe impl Immutable for i32 {}
unsafe impl Immutable for i64 {}
unsafe impl Immutable for i8 {}
unsafe impl Immutable for Infallible {}
unsafe impl Immutable for isize {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m128 {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m128 {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m128bh {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m128bh {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m128d {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m128d {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m128i {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m128i {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m256 {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m256 {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m256bh {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m256bh {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m256d {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m256d {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m256i {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m256i {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m512 {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m512 {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m512bh {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m512bh {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m512d {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m512d {}
#[cfg(target_arch = "x86")]
unsafe impl Immutable for __m512i {}
#[cfg(target_arch = "x86_64")]
unsafe impl Immutable for __m512i {}
unsafe impl<T: Immutable> Immutable for ManuallyDrop<T> {}
unsafe impl<T: Immutable> Immutable for MaybeUninit<T> {}
unsafe impl<T: ?Sized> Immutable for NonNull<T> {}
unsafe impl Immutable for NonZero<i128> {}
unsafe impl Immutable for NonZero<i16> {}
unsafe impl Immutable for NonZero<i32> {}
unsafe impl Immutable for NonZero<i64> {}
unsafe impl Immutable for NonZero<i8> {}
unsafe impl Immutable for NonZero<isize> {}
unsafe impl Immutable for NonZero<u128> {}
unsafe impl Immutable for NonZero<u16> {}
unsafe impl Immutable for NonZero<u32> {}
unsafe impl Immutable for NonZero<u64> {}
unsafe impl Immutable for NonZero<u8> {}
unsafe impl Immutable for NonZero<usize> {}
unsafe impl<T: Immutable> Immutable for Option<T> {}
unsafe impl<T: ?Sized> Immutable for *const T {}
unsafe impl<T: ?Sized> Immutable for *mut T {}
unsafe impl<T, E> Immutable for Result<T, E>
where
T: Immutable,
E: Immutable,
{}
#[cfg_attr(feature = "unstable_docs", doc(fake_variadic))]
unsafe impl<T: Immutable> Immutable for (T,) {}
#[doc(hidden)]
unsafe impl<T0, T1> Immutable for (T0, T1)
where
T0: Immutable,
T1: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2> Immutable for (T0, T1, T2)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2, T3> Immutable for (T0, T1, T2, T3)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
T3: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2, T3, T4> Immutable for (T0, T1, T2, T3, T4)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
T3: Immutable,
T4: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2, T3, T4, T5> Immutable for (T0, T1, T2, T3, T4, T5)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
T3: Immutable,
T4: Immutable,
T5: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2, T3, T4, T5, T6> Immutable for (T0, T1, T2, T3, T4, T5, T6)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
T3: Immutable,
T4: Immutable,
T5: Immutable,
T6: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7> Immutable for (T0, T1, T2, T3, T4, T5, T6, T7)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
T3: Immutable,
T4: Immutable,
T5: Immutable,
T6: Immutable,
T7: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> Immutable for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
T3: Immutable,
T4: Immutable,
T5: Immutable,
T6: Immutable,
T7: Immutable,
T8: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> Immutable for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
T3: Immutable,
T4: Immutable,
T5: Immutable,
T6: Immutable,
T7: Immutable,
T8: Immutable,
T9: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Immutable for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
T3: Immutable,
T4: Immutable,
T5: Immutable,
T6: Immutable,
T7: Immutable,
T8: Immutable,
T9: Immutable,
T10: Immutable,
{}
#[doc(hidden)]
unsafe impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Immutable for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
where
T0: Immutable,
T1: Immutable,
T2: Immutable,
T3: Immutable,
T4: Immutable,
T5: Immutable,
T6: Immutable,
T7: Immutable,
T8: Immutable,
T9: Immutable,
T10: Immutable,
T11: Immutable,
{}
unsafe impl Immutable for u128 {}
unsafe impl Immutable for u16 {}
unsafe impl Immutable for u32 {}
unsafe impl Immutable for u64 {}
unsafe impl Immutable for u8 {}
unsafe impl Immutable for () {}
unsafe impl Immutable for usize {}
unsafe impl<T: Immutable> Immutable for Saturating<T> {}
unsafe impl<T: Immutable> Immutable for [T] {}
unsafe impl Immutable for str {}
unsafe impl<T: Immutable> Immutable for Wrapping<T> {}