diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs index 7b357bb487a0a..f74c6862006c1 100644 --- a/src/libcore/slice/mod.rs +++ b/src/libcore/slice/mod.rs @@ -23,7 +23,6 @@ // * The `raw` and `bytes` submodules. // * Boilerplate trait implementations. -use crate::borrow::Borrow; use crate::cmp; use crate::cmp::Ordering::{self, Equal, Greater, Less}; use crate::fmt; @@ -2157,14 +2156,16 @@ impl [T] { /// assert_eq!(buf, vec![1; 10]); /// ``` #[unstable(feature = "slice_fill", issue = "70758")] - pub fn fill(&mut self, value: V) + pub fn fill(&mut self, value: T) where - V: Borrow, T: Clone, { - let value = value.borrow(); - for el in self { - el.clone_from(value) + if let Some((last, elems)) = self.split_last_mut() { + for el in elems { + el.clone_from(&value); + } + + *last = value } }