@@ -2243,11 +2243,11 @@ fn write_in_place_with_drop<T>(
2243
2243
#[ rustc_unsafe_specialization_marker]
2244
2244
trait SourceIterMarker : SourceIter < Source : AsIntoIter > { }
2245
2245
2246
- impl < T > SourceIterMarker for T where T : SourceIter < Source : AsIntoIter > { }
2246
+ impl < T > SourceIterMarker for T where T : SourceIter < Source : AsIntoIter > + InPlaceIterable { }
2247
2247
2248
2248
impl < T , I > SpecFrom < T , I > for Vec < T >
2249
2249
where
2250
- I : Iterator < Item = T > + InPlaceIterable + SourceIterMarker ,
2250
+ I : Iterator < Item = T > + SourceIterMarker ,
2251
2251
{
2252
2252
default fn from_iter ( mut iterator : I ) -> Self {
2253
2253
// Additional requirements which cannot expressed via trait bounds. We rely on const eval
@@ -2920,6 +2920,17 @@ impl<T> Iterator for IntoIter<T> {
2920
2920
fn count ( self ) -> usize {
2921
2921
self . len ( )
2922
2922
}
2923
+
2924
+ unsafe fn get_unchecked ( & mut self , i : usize ) -> Self :: Item
2925
+ where
2926
+ Self : TrustedRandomAccess ,
2927
+ {
2928
+ // SAFETY: the caller must uphold the contract for
2929
+ // `Iterator::get_unchecked`.
2930
+ unsafe {
2931
+ if mem:: size_of :: < T > ( ) == 0 { mem:: zeroed ( ) } else { ptr:: read ( self . ptr . add ( i) ) }
2932
+ }
2933
+ }
2923
2934
}
2924
2935
2925
2936
#[ stable( feature = "rust1" , since = "1.0.0" ) ]
@@ -2967,12 +2978,6 @@ unsafe impl<T> TrustedRandomAccess for IntoIter<T>
2967
2978
where
2968
2979
T : Copy ,
2969
2980
{
2970
- unsafe fn get_unchecked ( & mut self , i : usize ) -> Self :: Item {
2971
- unsafe {
2972
- if mem:: size_of :: < T > ( ) == 0 { mem:: zeroed ( ) } else { ptr:: read ( self . ptr . add ( i) ) }
2973
- }
2974
- }
2975
-
2976
2981
fn may_have_side_effect ( ) -> bool {
2977
2982
false
2978
2983
}
0 commit comments