Stabilize const_option

This makes the following API stable in const contexts:

    impl<T> Option<T> {
        pub const fn as_mut(&mut self) -> Option<&mut T>;
        pub const fn expect(self, msg: &str) -> T;
        pub const fn unwrap(self) -> T;
        pub const unsafe fn unwrap_unchecked(self) -> T;
        pub const fn take(&mut self) -> Option<T>;
        pub const fn replace(&mut self, value: T) -> Option<T>;
    }

    impl<T> Option<&T> {
        pub const fn copied(self) -> Option<T>
        where T: Copy;
    }

    impl<T> Option<&mut T> {
        pub const fn copied(self) -> Option<T>
        where T: Copy;
    }

    impl<T, E> Option<Result<T, E>> {
        pub const fn transpose(self) -> Result<Option<T>, E>
    }

    impl<T> Option<Option<T>> {
        pub const fn flatten(self) -> Option<T>;
    }

The following functions make use of the unstable
`const_precise_live_drops` feature:

- `expect`
- `unwrap`
- `unwrap_unchecked`
- `transpose`
- `flatten`

Fixes: <https://github.com/rust-lang/rust/issues/67441>
This commit is contained in:
Trevor Gross 2024-10-01 17:11:48 -04:00
parent f5cc292830
commit 3c43a60d06
2 changed files with 2 additions and 2 deletions

View File

@ -3,7 +3,7 @@
#![allow(dead_code, incomplete_features)] #![allow(dead_code, incomplete_features)]
#![warn(clippy::doc_markdown)] #![warn(clippy::doc_markdown)]
#![feature(custom_inner_attributes, generic_const_exprs, const_option)] #![feature(custom_inner_attributes, generic_const_exprs)]
#![rustfmt::skip] #![rustfmt::skip]
/// The `foo_bar` function does _nothing_. See also `foo::bar`. (note the dot there) /// The `foo_bar` function does _nothing_. See also `foo::bar`. (note the dot there)

View File

@ -3,7 +3,7 @@
#![allow(dead_code, incomplete_features)] #![allow(dead_code, incomplete_features)]
#![warn(clippy::doc_markdown)] #![warn(clippy::doc_markdown)]
#![feature(custom_inner_attributes, generic_const_exprs, const_option)] #![feature(custom_inner_attributes, generic_const_exprs)]
#![rustfmt::skip] #![rustfmt::skip]
/// The foo_bar function does _nothing_. See also foo::bar. (note the dot there) /// The foo_bar function does _nothing_. See also foo::bar. (note the dot there)