From f3d42786434dca79521ee35d1c0c7c478a86dfaa Mon Sep 17 00:00:00 2001 From: Zachary S Date: Tue, 13 May 2025 21:12:47 -0500 Subject: [PATCH] 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. --- library/core/src/iter/adapters/fuse.rs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/library/core/src/iter/adapters/fuse.rs b/library/core/src/iter/adapters/fuse.rs index e9765f911a252..0072a95e8dfe0 100644 --- a/library/core/src/iter/adapters/fuse.rs +++ b/library/core/src/iter/adapters/fuse.rs @@ -198,8 +198,30 @@ impl Default for Fuse { /// let iter: Fuse> = 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 { + /// Some(4) + /// } + /// } + /// + /// let mut iter: Fuse = 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()) } } }