From 1112274275be9216b42ef2f27b1e85c5e88d67c5 Mon Sep 17 00:00:00 2001 From: Connor Tsui Date: Thu, 28 Aug 2025 19:53:12 +0100 Subject: [PATCH 1/3] add `Bound::copied` Signed-off-by: Connor Tsui --- library/core/src/ops/range.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/library/core/src/ops/range.rs b/library/core/src/ops/range.rs index 95d1e2069ac94..c5a7744d73b39 100644 --- a/library/core/src/ops/range.rs +++ b/library/core/src/ops/range.rs @@ -736,6 +736,28 @@ impl Bound { } } +impl Bound<&T> { + /// Map a `Bound<&T>` to a `Bound` by copying the contents of the bound. + /// + /// # Examples + /// + /// ``` + /// use std::ops::Bound::*; + /// use std::ops::RangeBounds; + /// + /// assert_eq!((1..12).start_bound(), Included(&1)); + /// assert_eq!((1..12).start_bound().copied(), Included(1)); + /// ``` + #[unstable(feature = "bound_copied", issue = "145966")] + pub fn copied(self) -> Bound { + match self { + Bound::Unbounded => Bound::Unbounded, + Bound::Included(x) => Bound::Included(*x), + Bound::Excluded(x) => Bound::Excluded(*x), + } + } +} + impl Bound<&T> { /// Map a `Bound<&T>` to a `Bound` by cloning the contents of the bound. /// From 9c1255f0a46e7a8d22f17ad5705f0c8e2018bfe6 Mon Sep 17 00:00:00 2001 From: Connor Tsui <87130162+connortsui20@users.noreply.github.com> Date: Thu, 28 Aug 2025 20:38:07 +0100 Subject: [PATCH 2/3] add feature gate in doc test --- library/core/src/ops/range.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/core/src/ops/range.rs b/library/core/src/ops/range.rs index c5a7744d73b39..b1df5afa20224 100644 --- a/library/core/src/ops/range.rs +++ b/library/core/src/ops/range.rs @@ -742,6 +742,8 @@ impl Bound<&T> { /// # Examples /// /// ``` + /// #![feature(bound_copied)] + /// /// use std::ops::Bound::*; /// use std::ops::RangeBounds; /// From 114c0c2fefbc90d1cb71f6a0c4d150174e73ca75 Mon Sep 17 00:00:00 2001 From: Connor Tsui Date: Sat, 30 Aug 2025 11:15:41 +0100 Subject: [PATCH 3/3] Add `#[must_use] and update `cloned` documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Connor Tsui Co-authored-by: Jonas Böttiger --- library/core/src/ops/range.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/library/core/src/ops/range.rs b/library/core/src/ops/range.rs index b1df5afa20224..c0a27775694c3 100644 --- a/library/core/src/ops/range.rs +++ b/library/core/src/ops/range.rs @@ -751,6 +751,7 @@ impl Bound<&T> { /// assert_eq!((1..12).start_bound().copied(), Included(1)); /// ``` #[unstable(feature = "bound_copied", issue = "145966")] + #[must_use] pub fn copied(self) -> Bound { match self { Bound::Unbounded => Bound::Unbounded, @@ -769,8 +770,11 @@ impl Bound<&T> { /// use std::ops::Bound::*; /// use std::ops::RangeBounds; /// - /// assert_eq!((1..12).start_bound(), Included(&1)); - /// assert_eq!((1..12).start_bound().cloned(), Included(1)); + /// let a1 = String::from("a"); + /// let (a2, a3, a4) = (a1.clone(), a1.clone(), a1.clone()); + /// + /// assert_eq!(Included(&a1), (a2..).start_bound()); + /// assert_eq!(Included(a3), (a4..).start_bound().cloned()); /// ``` #[must_use = "`self` will be dropped if the result is not used"] #[stable(feature = "bound_cloned", since = "1.55.0")]