about summary refs log tree commit diff
path: root/library/core
diff options
context:
space:
mode:
authorMadhav Madhusoodanan <f20200049@pilani.bits-pilani.ac.in>2025-02-24 00:36:25 +0530
committerMadhav Madhusoodanan <f20200049@pilani.bits-pilani.ac.in>2025-02-24 07:36:27 +0530
commitf49b6c6cd58aa61c804dcb22cc013c728f8924af (patch)
treed1490c1fe8beb5da79c6601dd15ba7af872e4c10 /library/core
parentb522e7c5ea8334fbccb9dd7f9b33759304743fd0 (diff)
downloadrust-f49b6c6cd58aa61c804dcb22cc013c728f8924af.tar.gz
rust-f49b6c6cd58aa61c804dcb22cc013c728f8924af.zip
Added into_value const function to ControlFlow<T, T>
Fixed issue with usage of generics and moved feature gate to crate root

Removed const tag

Fixed alphabetical ordering of feature gate, added same to doctest

Removed crate-level declaration of feature gate control_flow_into_value

Used const_precise_live_drops to constify into_value without issue of a drop
Diffstat (limited to 'library/core')
-rw-r--r--library/core/src/ops/control_flow.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/library/core/src/ops/control_flow.rs b/library/core/src/ops/control_flow.rs
index c8fcee5c140..8993e14fcd3 100644
--- a/library/core/src/ops/control_flow.rs
+++ b/library/core/src/ops/control_flow.rs
@@ -229,6 +229,27 @@ impl<B, C> ControlFlow<B, C> {
     }
 }
 
+impl<T> ControlFlow<T, T> {
+    /// Extracts the value `T` that is wrapped by `ControlFlow<T, T>`.
+    ///
+    /// # Examples
+    ///
+    /// ```
+    /// #![feature(control_flow_into_value)]
+    /// use std::ops::ControlFlow;
+    ///
+    /// assert_eq!(ControlFlow::<i32, i32>::Break(1024).into_value(), 1024);
+    /// assert_eq!(ControlFlow::<i32, i32>::Continue(512).into_value(), 512);
+    /// ```
+    #[unstable(feature = "control_flow_into_value", issue = "137461")]
+    #[rustc_allow_const_fn_unstable(const_precise_live_drops)]
+    pub const fn into_value(self) -> T {
+        match self {
+            ControlFlow::Continue(x) | ControlFlow::Break(x) => x,
+        }
+    }
+}
+
 /// These are used only as part of implementing the iterator adapters.
 /// They have mediocre names and non-obvious semantics, so aren't
 /// currently on a path to potential stabilization.