forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#73486 - Manishearth:rollup-11iyqpc, r=Manishe…
…arth Rollup of 17 pull requests Successful merges: - rust-lang#70551 (Make all uses of ty::Error delay a span bug) - rust-lang#71338 (Expand "recursive opaque type" diagnostic) - rust-lang#71976 (Improve diagnostics for `let x += 1`) - rust-lang#72279 (add raw_ref macros) - rust-lang#72628 (Add tests for 'impl Default for [T; N]') - rust-lang#72804 (Further tweak lifetime errors involving `dyn Trait` and `impl Trait` in return position) - rust-lang#72814 (remove visit_terminator_kind from MIR visitor) - rust-lang#72836 (Complete the std::time documentation to warn about the inconsistencies between OS) - rust-lang#72968 (Only highlight doc search results via mouseover if mouse has moved) - rust-lang#73034 (Export `#[inline]` fns with extern indicators) - rust-lang#73315 (Clean up some weird command strings) - rust-lang#73320 (Make new type param suggestion more targetted) - rust-lang#73361 (Tweak "non-primitive cast" error) - rust-lang#73425 (Mention functions pointers in the documentation) - rust-lang#73428 (Fix typo in librustc_ast docs) - rust-lang#73447 (Improve document for `Result::as_deref(_mut)` methods) - rust-lang#73476 (Added tooltip for should_panic code examples) Failed merges: r? @ghost
- Loading branch information
Showing
197 changed files
with
2,110 additions
and
921 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
A `'static` requirement in a return type involving a trait is not fulfilled. | ||
|
||
Erroneous code examples: | ||
|
||
```compile_fail,E0759 | ||
use std::fmt::Debug; | ||
fn foo(x: &i32) -> impl Debug { | ||
x | ||
} | ||
``` | ||
|
||
```compile_fail,E0759 | ||
# use std::fmt::Debug; | ||
fn bar(x: &i32) -> Box<dyn Debug> { | ||
Box::new(x) | ||
} | ||
``` | ||
|
||
These examples have the same semantics as the following: | ||
|
||
```compile_fail,E0759 | ||
# use std::fmt::Debug; | ||
fn foo(x: &i32) -> impl Debug + 'static { | ||
x | ||
} | ||
``` | ||
|
||
```compile_fail,E0759 | ||
# use std::fmt::Debug; | ||
fn bar(x: &i32) -> Box<dyn Debug + 'static> { | ||
Box::new(x) | ||
} | ||
``` | ||
|
||
Both [`dyn Trait`] and [`impl Trait`] in return types have a an implicit | ||
`'static` requirement, meaning that the value implementing them that is being | ||
returned has to be either a `'static` borrow or an owned value. | ||
|
||
In order to change the requirement from `'static` to be a lifetime derived from | ||
its arguments, you can add an explicit bound, either to an anonymous lifetime | ||
`'_` or some appropriate named lifetime. | ||
|
||
``` | ||
# use std::fmt::Debug; | ||
fn foo(x: &i32) -> impl Debug + '_ { | ||
x | ||
} | ||
fn bar(x: &i32) -> Box<dyn Debug + '_> { | ||
Box::new(x) | ||
} | ||
``` | ||
|
||
These are equivalent to the following explicit lifetime annotations: | ||
|
||
``` | ||
# use std::fmt::Debug; | ||
fn foo<'a>(x: &'a i32) -> impl Debug + 'a { | ||
x | ||
} | ||
fn bar<'a>(x: &'a i32) -> Box<dyn Debug + 'a> { | ||
Box::new(x) | ||
} | ||
``` | ||
|
||
[`dyn Trait`]: https://doc.rust-lang.org/book/ch17-02-trait-objects.html#using-trait-objects-that-allow-for-values-of-different-types | ||
[`impl Trait`]: https://doc.rust-lang.org/book/ch10-02-traits.html#returning-types-that-implement-traits |
Oops, something went wrong.