File tree 1 file changed +14
-8
lines changed
library/core/src/iter/traits
1 file changed +14
-8
lines changed Original file line number Diff line number Diff line change @@ -3094,16 +3094,22 @@ pub trait Iterator {
3094
3094
P : FnMut ( Self :: Item ) -> bool ,
3095
3095
{
3096
3096
#[ inline]
3097
- fn check < T > (
3098
- mut predicate : impl FnMut ( T ) -> bool ,
3099
- ) -> impl FnMut ( usize , T ) -> ControlFlow < usize , usize > {
3100
- #[ rustc_inherit_overflow_checks]
3101
- move |i, x| {
3102
- if predicate ( x) { ControlFlow :: Break ( i) } else { ControlFlow :: Continue ( i + 1 ) }
3097
+ fn check < ' a , T > (
3098
+ mut predicate : impl FnMut ( T ) -> bool + ' a ,
3099
+ acc : & ' a mut usize ,
3100
+ ) -> impl FnMut ( ( ) , T ) -> ControlFlow < usize , ( ) > + ' a {
3101
+ move |_, x| {
3102
+ if predicate ( x) {
3103
+ ControlFlow :: Break ( * acc)
3104
+ } else {
3105
+ * acc += 1 ;
3106
+ ControlFlow :: Continue ( ( ) )
3107
+ }
3103
3108
}
3104
3109
}
3105
-
3106
- self . try_fold ( 0 , check ( predicate) ) . break_value ( )
3110
+
3111
+ let mut acc = 0 ;
3112
+ self . try_fold ( ( ) , check ( predicate, & mut acc) ) . break_value ( )
3107
3113
}
3108
3114
3109
3115
/// Searches for an element in an iterator from the right, returning its
You can’t perform that action at this time.
0 commit comments