The default implementation of .repr() will call conveniently call
transmute_copy which should be appropriate for all implementors, but is
memory unsafe if used wrong.
Fixes #22260
You need to use `unsafe impl` to implement the Repr trait now.
[breaking-change]
/// This trait is meant to map equivalences between raw structs and their
/// corresponding rust values.
-pub trait Repr<T> {
+pub unsafe trait Repr<T> {
/// This function "unwraps" a rust value (without consuming it) into its raw
/// struct representation. This can be used to read/write different values
/// for the struct. This is a safe method because by default it does not
fn repr(&self) -> T { unsafe { mem::transmute_copy(&self) } }
}
-impl<T> Repr<Slice<T>> for [T] {}
-impl Repr<Slice<u8>> for str {}
+unsafe impl<T> Repr<Slice<T>> for [T] {}
+unsafe impl Repr<Slice<u8>> for str {}