pub unsafe trait LifetimeFree { }Expand description
Marker trait for types that do not contain any lifetime parameters. Such types are safe to cast from non-static type parameters if their types are equal.
This trait is used by cast! to determine what casts are legal on values
without a 'static type constraint.
§Safety
When implementing this trait for a type, you must ensure that the type is free of any lifetime parameters. Failure to meet all of the requirements below may result in undefined behavior.
- The type must be
'static. - The type must be free of lifetime parameters. In other words, the type must be an “owned” type and not contain any lifetime parameters.
- All contained fields must also be
LifetimeFree.
§Examples
use castaway::LifetimeFree;
struct Container<T>(T);
// UNDEFINED BEHAVIOR!!
// unsafe impl LifetimeFree for Container<&'static str> {}
// UNDEFINED BEHAVIOR!!
// unsafe impl<T> LifetimeFree for Container<T> {}
// This is safe.
unsafe impl<T: LifetimeFree> LifetimeFree for Container<T> {}
struct PlainOldData {
foo: u8,
bar: bool,
}
// This is also safe, since all fields are known to be `LifetimeFree`.
unsafe impl LifetimeFree for PlainOldData {}Implementations on Foreign Types§
impl LifetimeFree for bool
impl LifetimeFree for char
impl LifetimeFree for f32
impl LifetimeFree for f64
impl LifetimeFree for i8
impl LifetimeFree for i16
impl LifetimeFree for i32
impl LifetimeFree for i64
impl LifetimeFree for i128
impl LifetimeFree for isize
impl LifetimeFree for str
impl LifetimeFree for u8
impl LifetimeFree for u16
impl LifetimeFree for u32
impl LifetimeFree for u64
impl LifetimeFree for u128
impl LifetimeFree for ()
impl LifetimeFree for usize
impl LifetimeFree for String
impl LifetimeFree for NonZeroI8
impl LifetimeFree for NonZeroI16
impl LifetimeFree for NonZeroI32
impl LifetimeFree for NonZeroI64
impl LifetimeFree for NonZeroI128
impl LifetimeFree for NonZeroIsize
impl LifetimeFree for NonZeroU8
impl LifetimeFree for NonZeroU16
impl LifetimeFree for NonZeroU32
impl LifetimeFree for NonZeroU64
impl LifetimeFree for NonZeroU128
impl LifetimeFree for NonZeroUsize
impl<T0: LifetimeFree> LifetimeFree for (T0,)
impl<T0: LifetimeFree, T1: LifetimeFree> LifetimeFree for (T0, T1)
impl<T0: LifetimeFree, T1: LifetimeFree, T2: LifetimeFree> LifetimeFree for (T0, T1, T2)
impl<T0: LifetimeFree, T1: LifetimeFree, T2: LifetimeFree, T3: LifetimeFree> LifetimeFree for (T0, T1, T2, T3)
impl<T0: LifetimeFree, T1: LifetimeFree, T2: LifetimeFree, T3: LifetimeFree, T4: LifetimeFree> LifetimeFree for (T0, T1, T2, T3, T4)
impl<T0: LifetimeFree, T1: LifetimeFree, T2: LifetimeFree, T3: LifetimeFree, T4: LifetimeFree, T5: LifetimeFree> LifetimeFree for (T0, T1, T2, T3, T4, T5)
impl<T0: LifetimeFree, T1: LifetimeFree, T2: LifetimeFree, T3: LifetimeFree, T4: LifetimeFree, T5: LifetimeFree, T6: LifetimeFree> LifetimeFree for (T0, T1, T2, T3, T4, T5, T6)
impl<T0: LifetimeFree, T1: LifetimeFree, T2: LifetimeFree, T3: LifetimeFree, T4: LifetimeFree, T5: LifetimeFree, T6: LifetimeFree, T7: LifetimeFree> LifetimeFree for (T0, T1, T2, T3, T4, T5, T6, T7)
impl<T0: LifetimeFree, T1: LifetimeFree, T2: LifetimeFree, T3: LifetimeFree, T4: LifetimeFree, T5: LifetimeFree, T6: LifetimeFree, T7: LifetimeFree, T8: LifetimeFree> LifetimeFree for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
impl<T0: LifetimeFree, T1: LifetimeFree, T2: LifetimeFree, T3: LifetimeFree, T4: LifetimeFree, T5: LifetimeFree, T6: LifetimeFree, T7: LifetimeFree, T8: LifetimeFree, T9: LifetimeFree> LifetimeFree for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
impl<T: LifetimeFree> LifetimeFree for Option<T>
impl<T: LifetimeFree> LifetimeFree for [T]
impl<T: LifetimeFree> LifetimeFree for Box<T>
impl<T: LifetimeFree> LifetimeFree for Arc<T>
Available on
target_has_atomic=ptr only.