diff --git a/src/libcore/array.rs b/src/libcore/array.rs index 8c785b109236d..c986914440de0 100644 --- a/src/libcore/array.rs +++ b/src/libcore/array.rs @@ -35,14 +35,23 @@ use slice::{Iter, IterMut, SliceExt}; /// /// This trait can be used to implement other traits on fixed-size arrays /// without causing much metadata bloat. -pub trait FixedSizeArray { +/// +/// The trait is marked unsafe in order to restrict implementors to fixed-size +/// arrays. User of this trait can assume that implementors have the exact +/// layout in memory of a fixed size array (for example, for unsafe +/// initialization). +/// +/// Note that the traits AsRef and AsMut provide similar methods for types that +/// may not be fixed-size arrays. Implementors should prefer those traits +/// instead. +pub unsafe trait FixedSizeArray { /// Converts the array to immutable slice fn as_slice(&self) -> &[T]; /// Converts the array to mutable slice fn as_mut_slice(&mut self) -> &mut [T]; } -impl> FixedSizeArray for A { +unsafe impl> FixedSizeArray for A { #[inline] fn as_slice(&self) -> &[T] { self