@@ -1714,6 +1714,27 @@ pub struct IntoIter<T> {
1714
1714
end : * const T ,
1715
1715
}
1716
1716
1717
+ impl < T > IntoIter < T > {
1718
+ /// Returns the remaining items of this iterator as a slice.
1719
+ ///
1720
+ /// # Examples
1721
+ ///
1722
+ /// ```rust
1723
+ /// # #![feature(vec_into_iter_as_slice)]
1724
+ /// let vec = vec!['a', 'b', 'c'];
1725
+ /// let mut into_iter = vec.into_iter();
1726
+ /// assert_eq!(into_iter.as_slice(), &['a', 'b', 'c']);
1727
+ /// let _ = into_iter.next().unwrap();
1728
+ /// assert_eq!(into_iter.as_slice(), &['b', 'c']);
1729
+ /// ```
1730
+ #[ unstable( feature = "vec_into_iter_as_slice" , issue = "35601" ) ]
1731
+ pub fn as_slice ( & self ) -> & [ T ] {
1732
+ unsafe {
1733
+ slice:: from_raw_parts ( self . ptr , self . len ( ) )
1734
+ }
1735
+ }
1736
+ }
1737
+
1717
1738
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
1718
1739
unsafe impl < T : Send > Send for IntoIter < T > { }
1719
1740
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -1796,9 +1817,7 @@ impl<T> ExactSizeIterator for IntoIter<T> {}
1796
1817
#[ stable( feature = "vec_into_iter_clone" , since = "1.8.0" ) ]
1797
1818
impl < T : Clone > Clone for IntoIter < T > {
1798
1819
fn clone ( & self ) -> IntoIter < T > {
1799
- unsafe {
1800
- slice:: from_raw_parts ( self . ptr , self . len ( ) ) . to_owned ( ) . into_iter ( )
1801
- }
1820
+ self . as_slice ( ) . to_owned ( ) . into_iter ( )
1802
1821
}
1803
1822
}
1804
1823
0 commit comments