diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2021-03-07 10:41:09 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-07 10:41:09 +0900 |
| commit | 0adc1965218bb24290c74f680d94c20799ff8f70 (patch) | |
| tree | 6fc08a14292d837ed3145c579895c6f91fb36d7e | |
| parent | d1dc16623f9e143ec67b41e8392ae8906abb44e0 (diff) | |
| parent | 79c2b75e88bdab5fccd7d63750ef11aff2f8eaba (diff) | |
Rollup merge of #82130 - jhpratt:const-option-result, r=RalfJung
Make some Option, Result methods unstably const The following methods are now unstably const: - Option::transpose - Option::flatten - Result::flatten While some methods for could likely be made `const` in the future, nearly all of them require something to be dropped at compile-time, which isn't currently supported. The functions listed above should have a trivial path to stabilization.
| -rw-r--r-- | library/core/src/option.rs | 13 | ||||
| -rw-r--r-- | library/core/src/result.rs | 3 |
2 files changed, 11 insertions, 5 deletions
diff --git a/library/core/src/option.rs b/library/core/src/option.rs index bcd2b207c4f..e3c812a047c 100644 --- a/library/core/src/option.rs +++ b/library/core/src/option.rs @@ -150,7 +150,7 @@ use crate::iter::{FromIterator, FusedIterator, TrustedLen}; use crate::pin::Pin; use crate::{ - convert, fmt, hint, mem, + fmt, hint, mem, ops::{self, Deref, DerefMut}, }; @@ -1275,7 +1275,8 @@ impl<T, E> Option<Result<T, E>> { /// ``` #[inline] #[stable(feature = "transpose_result", since = "1.33.0")] - pub fn transpose(self) -> Result<Option<T>, E> { + #[rustc_const_unstable(feature = "const_option", issue = "67441")] + pub const fn transpose(self) -> Result<Option<T>, E> { match self { Some(Ok(x)) => Ok(Some(x)), Some(Err(e)) => Err(e), @@ -1750,7 +1751,11 @@ impl<T> Option<Option<T>> { /// ``` #[inline] #[stable(feature = "option_flattening", since = "1.40.0")] - pub fn flatten(self) -> Option<T> { - self.and_then(convert::identity) + #[rustc_const_unstable(feature = "const_option", issue = "67441")] + pub const fn flatten(self) -> Option<T> { + match self { + Some(inner) => inner, + None => None, + } } } diff --git a/library/core/src/result.rs b/library/core/src/result.rs index 7c48b8e41c6..2ce8a703c12 100644 --- a/library/core/src/result.rs +++ b/library/core/src/result.rs @@ -1233,7 +1233,8 @@ impl<T, E> Result<Option<T>, E> { /// ``` #[inline] #[stable(feature = "transpose_result", since = "1.33.0")] - pub fn transpose(self) -> Option<Result<T, E>> { + #[rustc_const_unstable(feature = "const_result", issue = "82814")] + pub const fn transpose(self) -> Option<Result<T, E>> { match self { Ok(Some(x)) => Some(Ok(x)), Ok(None) => None, |
