about summary refs log tree commit diff
path: root/src/liballoc
diff options
context:
space:
mode:
authorJonathan Behrens <fintelia@gmail.com>2018-03-02 23:23:00 -0500
committerJonathan Behrens <fintelia@gmail.com>2018-03-02 23:25:52 -0500
commit370df40dab8df9f3c0b10bb7396225b8d24869b3 (patch)
treee124a618b0938099723894b23325eb1bbf1e8c87 /src/liballoc
parentae73a210814bdf50d72a95568eb8c9c96772c641 (diff)
downloadrust-370df40dab8df9f3c0b10bb7396225b8d24869b3.tar.gz
rust-370df40dab8df9f3c0b10bb7396225b8d24869b3.zip
Don't have Vec<T> delegate to [T]'s bounds for indexing
Diffstat (limited to 'src/liballoc')
-rw-r--r--src/liballoc/vec.rs18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/liballoc/vec.rs b/src/liballoc/vec.rs
index 83538e5acd4..feed7c8699a 100644
--- a/src/liballoc/vec.rs
+++ b/src/liballoc/vec.rs
@@ -1527,23 +1527,27 @@ impl<T: Hash> Hash for Vec<T> {
 
 #[stable(feature = "rust1", since = "1.0.0")]
 #[rustc_on_unimplemented = "vector indices are of type `usize` or ranges of `usize`"]
-impl<T, I> Index<I> for Vec<T> where [T]: Index<I> {
-    type Output = <[T] as Index<I>>::Output;
+impl<T, I> Index<I> for Vec<T>
+where
+    I: ::core::slice::SliceIndex<[T]>,
+{
+    type Output = I::Output;
 
     #[inline]
     fn index(&self, index: I) -> &Self::Output {
-        // NB indexing via implementation on slice
-        &(**self)[index]
+        Index::index(&**self, index)
     }
 }
 
 #[stable(feature = "rust1", since = "1.0.0")]
 #[rustc_on_unimplemented = "vector indices are of type `usize` or ranges of `usize`"]
-impl<T, I> IndexMut<I> for Vec<T> where [T]: IndexMut<I> {
+impl<T, I> IndexMut<I> for Vec<T>
+where
+    I: ::core::slice::SliceIndex<[T]>,
+{
     #[inline]
     fn index_mut(&mut self, index: I) -> &mut Self::Output {
-        // NB indexing via implementation on slice
-        &mut (**self)[index]
+        IndexMut::index_mut(&mut **self, index)
     }
 }