Skip to content

Commit b78b824

Browse files
authored
Rollup merge of rust-lang#64708 - SimonSapin:option-deref, r=Centril
Stabilize `Option::as_deref` and `Option::as_deref_mut` The tracking issue rust-lang#50264 still has unresolved question for the corresponding `Result` methods.
2 parents 7870050 + 0797712 commit b78b824

File tree

10 files changed

+4
-17
lines changed

10 files changed

+4
-17
lines changed

src/libcore/option.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -1102,7 +1102,6 @@ impl<T: Default> Option<T> {
11021102
}
11031103
}
11041104

1105-
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
11061105
impl<T: Deref> Option<T> {
11071106
/// Converts from `Option<T>` (or `&Option<T>`) to `Option<&T::Target>`.
11081107
///
@@ -1114,20 +1113,18 @@ impl<T: Deref> Option<T> {
11141113
/// # Examples
11151114
///
11161115
/// ```
1117-
/// #![feature(inner_deref)]
1118-
///
11191116
/// let x: Option<String> = Some("hey".to_owned());
11201117
/// assert_eq!(x.as_deref(), Some("hey"));
11211118
///
11221119
/// let x: Option<String> = None;
11231120
/// assert_eq!(x.as_deref(), None);
11241121
/// ```
1122+
#[stable(feature = "option_deref", since = "1.40.0")]
11251123
pub fn as_deref(&self) -> Option<&T::Target> {
11261124
self.as_ref().map(|t| t.deref())
11271125
}
11281126
}
11291127

1130-
#[unstable(feature = "inner_deref", reason = "newly added", issue = "50264")]
11311128
impl<T: DerefMut> Option<T> {
11321129
/// Converts from `Option<T>` (or `&mut Option<T>`) to `Option<&mut T::Target>`.
11331130
///
@@ -1137,14 +1134,13 @@ impl<T: DerefMut> Option<T> {
11371134
/// # Examples
11381135
///
11391136
/// ```
1140-
/// #![feature(inner_deref)]
1141-
///
11421137
/// let mut x: Option<String> = Some("hey".to_owned());
11431138
/// assert_eq!(x.as_deref_mut().map(|x| {
11441139
/// x.make_ascii_uppercase();
11451140
/// x
11461141
/// }), Some("HEY".to_owned().as_mut_str()));
11471142
/// ```
1143+
#[stable(feature = "option_deref", since = "1.40.0")]
11481144
pub fn as_deref_mut(&mut self) -> Option<&mut T::Target> {
11491145
self.as_mut().map(|t| t.deref_mut())
11501146
}

src/librustc/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
#![feature(const_transmute)]
3636
#![feature(core_intrinsics)]
3737
#![feature(drain_filter)]
38-
#![feature(inner_deref)]
3938
#![cfg_attr(windows, feature(libc))]
4039
#![feature(never_type)]
4140
#![feature(exhaustive_patterns)]

src/librustc_resolve/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
1010
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
1111

12-
#![feature(inner_deref)]
1312
#![feature(crate_visibility_modifier)]
1413
#![feature(label_break_value)]
1514
#![feature(mem_take)]

src/librustc_save_analysis/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#![doc(html_root_url = "https://doc.rust-lang.org/nightly/")]
22
#![feature(nll)]
3-
#![feature(inner_deref)]
43

54
#![recursion_limit="256"]
65

src/librustc_typeck/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ This API is completely unstable and subject to change.
6767
#![feature(nll)]
6868
#![feature(slice_patterns)]
6969
#![feature(never_type)]
70-
#![feature(inner_deref)]
7170
#![feature(mem_take)]
7271

7372
#![recursion_limit="256"]

src/librustdoc/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
#![feature(crate_visibility_modifier)]
1515
#![feature(const_fn)]
1616
#![feature(drain_filter)]
17-
#![feature(inner_deref)]
1817
#![feature(never_type)]
1918
#![feature(mem_take)]
2019
#![feature(unicode_internals)]

src/test/ui/issues/issue-50264-inner-deref-trait/option-as_deref.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#![feature(inner_deref)]
2-
31
fn main() {
42
let _result = &Some(42).as_deref();
53
//~^ ERROR no method named `as_deref` found for type `std::option::Option<{integer}>`

src/test/ui/issues/issue-50264-inner-deref-trait/option-as_deref.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error[E0599]: no method named `as_deref` found for type `std::option::Option<{integer}>` in the current scope
2-
--> $DIR/option-as_deref.rs:4:29
2+
--> $DIR/option-as_deref.rs:2:29
33
|
44
LL | let _result = &Some(42).as_deref();
55
| ^^^^^^^^ help: there is a method with a similar name: `as_ref`

src/test/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.rs

-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
#![feature(inner_deref)]
2-
31
fn main() {
42
let _result = &mut Some(42).as_deref_mut();
53
//~^ ERROR no method named `as_deref_mut` found for type `std::option::Option<{integer}>`

src/test/ui/issues/issue-50264-inner-deref-trait/option-as_deref_mut.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
error[E0599]: no method named `as_deref_mut` found for type `std::option::Option<{integer}>` in the current scope
2-
--> $DIR/option-as_deref_mut.rs:4:33
2+
--> $DIR/option-as_deref_mut.rs:2:33
33
|
44
LL | let _result = &mut Some(42).as_deref_mut();
55
| ^^^^^^^^^^^^ method not found in `std::option::Option<{integer}>`

0 commit comments

Comments
 (0)