@@ -1714,6 +1714,27 @@ pub struct IntoIter<T> {
17141714 end : * const T ,
17151715}
17161716
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+
17171738#[ stable( feature = "rust1" , since = "1.0.0" ) ]
17181739unsafe impl < T : Send > Send for IntoIter < T > { }
17191740#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -1796,9 +1817,7 @@ impl<T> ExactSizeIterator for IntoIter<T> {}
17961817#[ stable( feature = "vec_into_iter_clone" , since = "1.8.0" ) ]
17971818impl < T : Clone > Clone for IntoIter < T > {
17981819 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 ( )
18021821 }
18031822}
18041823
0 commit comments