#[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)
}
}
| ^^^^^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[{integer}]>` is not implemented for `i32`
- = note: required because of the requirements on the impl of `std::ops::Index<i32>` for `[{integer}]`
+ = note: required because of the requirements on the impl of `std::ops::Index<i32>` for `std::vec::Vec<{integer}>`
error: aborting due to previous error