Make std::raw::Repr an unsafe trait

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 commit is contained in:
Ulrik Sverdrup 2015-02-13 20:31:09 +01:00 committed by Huon Wilson
parent 5e3ae102db
commit 7a52932f4c

View File

@ -154,7 +154,7 @@ pub struct TraitObject {
/// 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
@ -163,5 +163,5 @@ pub trait Repr<T> {
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 {}