diff --git a/library/core/src/result.rs b/library/core/src/result.rs index dda827900d9..75f2c222ba8 100644 --- a/library/core/src/result.rs +++ b/library/core/src/result.rs @@ -729,7 +729,8 @@ impl Result { /// ``` #[inline] #[stable(feature = "rust1", since = "1.0.0")] - pub fn as_mut(&mut self) -> Result<&mut T, &mut E> { + #[rustc_const_unstable(feature = "const_result", issue = "82814")] + pub const fn as_mut(&mut self) -> Result<&mut T, &mut E> { match *self { Ok(ref mut x) => Ok(x), Err(ref mut x) => Err(x), diff --git a/library/core/tests/lib.rs b/library/core/tests/lib.rs index cf669163d3e..6958f07227a 100644 --- a/library/core/tests/lib.rs +++ b/library/core/tests/lib.rs @@ -65,6 +65,7 @@ #![feature(once_cell)] #![feature(unsized_tuple_coercion)] #![feature(const_option)] +#![feature(const_result)] #![feature(integer_atomics)] #![feature(int_roundings)] #![feature(slice_group_by)] diff --git a/library/core/tests/result.rs b/library/core/tests/result.rs index 612f083a5c1..1652c1b83de 100644 --- a/library/core/tests/result.rs +++ b/library/core/tests/result.rs @@ -352,6 +352,29 @@ fn result_const() { assert!(!IS_ERR) } +#[test] +const fn result_const_mut() { + let mut result: Result = Ok(32); + + { + let as_mut = result.as_mut(); + match as_mut { + Ok(v) => *v = 42, + Err(_) => unreachable!(), + } + } + + let mut result_err: Result = Err(false); + + { + let as_mut = result_err.as_mut(); + match as_mut { + Ok(_) => unreachable!(), + Err(v) => *v = true, + } + } +} + #[test] fn result_opt_conversions() { #[derive(Copy, Clone, Debug, PartialEq)]