diff options
| author | Zachary S <zasample18+github@gmail.com> | 2025-05-13 21:12:47 -0500 |
|---|---|---|
| committer | Zachary S <zasample18+github@gmail.com> | 2025-06-18 16:28:07 -0500 |
| commit | f3d42786434dca79521ee35d1c0c7c478a86dfaa (patch) | |
| tree | e441c585f8635a2dd0efed21fd31f5ef93ebd350 | |
| parent | f9c15f40fbd7b4ba1baea6fb89551274047e17b3 (diff) | |
Fix `core::iter::Fuse`'s `Default` impl to do what it's docs say it does.
Add a doctest with a non-empty-by-default iterator.
| -rw-r--r-- | library/core/src/iter/adapters/fuse.rs | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/library/core/src/iter/adapters/fuse.rs b/library/core/src/iter/adapters/fuse.rs index e9765f911a2..0072a95e8df 100644 --- a/library/core/src/iter/adapters/fuse.rs +++ b/library/core/src/iter/adapters/fuse.rs @@ -198,8 +198,30 @@ impl<I: Default> Default for Fuse<I> { /// let iter: Fuse<slice::Iter<'_, u8>> = Default::default(); /// assert_eq!(iter.len(), 0); /// ``` + /// + /// This is equivalent to `I::default().fuse()`[^fuse_note]; e.g. if + /// `I::default()` is not an empty iterator, then this will not be + /// an empty iterator. + /// + /// ``` + /// # use std::iter::Fuse; + /// #[derive(Default)] + /// struct Fourever; + /// + /// impl Iterator for Fourever { + /// type Item = u32; + /// fn next(&mut self) -> Option<u32> { + /// Some(4) + /// } + /// } + /// + /// let mut iter: Fuse<Fourever> = Default::default(); + /// assert_eq!(iter.next(), Some(4)); + /// ``` + /// + /// [^fuse_note]: if `I` does not override `Iterator::fuse`'s default implementation fn default() -> Self { - Fuse { iter: Default::default() } + Fuse { iter: Some(I::default()) } } } |
