diff --git a/library/core/src/iter/sources/repeat_n.rs b/library/core/src/iter/sources/repeat_n.rs
index cc089c617c0..ada37b9af4c 100644
--- a/library/core/src/iter/sources/repeat_n.rs
+++ b/library/core/src/iter/sources/repeat_n.rs
@@ -1,7 +1,8 @@
use crate::fmt;
use crate::iter::{FusedIterator, TrustedLen, UncheckedIterator};
-use crate::mem::{self, MaybeUninit};
+use crate::mem::MaybeUninit;
use crate::num::NonZero;
+use crate::ops::{NeverShortCircuit, Try};
/// Creates a new iterator that repeats a single element a given number of times.
///
@@ -95,10 +96,10 @@ impl RepeatN {
fn take_element(&mut self) -> Option {
if self.count > 0 {
self.count = 0;
- let element = mem::replace(&mut self.element, MaybeUninit::uninit());
// SAFETY: We just set count to zero so it won't be dropped again,
// and it used to be non-zero so it hasn't already been dropped.
- unsafe { Some(element.assume_init()) }
+ let element = unsafe { self.element.assume_init_read() };
+ Some(element)
} else {
None
}
@@ -169,6 +170,39 @@ impl Iterator for RepeatN {
}
}
+ fn try_fold(&mut self, mut acc: B, mut f: F) -> R
+ where
+ F: FnMut(B, A) -> R,
+ R: Try