Add explanation for E0726
This commit is contained in:
parent
b8967b0d52
commit
911de7b98c
2 changed files with 47 additions and 1 deletions
|
@ -429,6 +429,7 @@ E0720: include_str!("./error_codes/E0720.md"),
|
|||
E0722: include_str!("./error_codes/E0722.md"),
|
||||
E0724: include_str!("./error_codes/E0724.md"),
|
||||
E0725: include_str!("./error_codes/E0725.md"),
|
||||
E0726: include_str!("./error_codes/E0726.md"),
|
||||
E0727: include_str!("./error_codes/E0727.md"),
|
||||
E0728: include_str!("./error_codes/E0728.md"),
|
||||
E0729: include_str!("./error_codes/E0729.md"),
|
||||
|
@ -641,6 +642,5 @@ E0787: include_str!("./error_codes/E0787.md"),
|
|||
E0717, // rustc_promotable without stability attribute
|
||||
// E0721, // `await` keyword
|
||||
// E0723, // unstable feature in `const` context
|
||||
E0726, // non-explicit (not `'_`) elided lifetime in unsupported position
|
||||
// E0738, // Removed; errored on `#[track_caller] fn`s in `extern "Rust" { ... }`.
|
||||
}
|
||||
|
|
46
compiler/rustc_error_codes/src/error_codes/E0726.md
Normal file
46
compiler/rustc_error_codes/src/error_codes/E0726.md
Normal file
|
@ -0,0 +1,46 @@
|
|||
An argument lifetime was elided in an async function.
|
||||
|
||||
Erroneous code example:
|
||||
|
||||
When a struct or a type is bound/declared with a lifetime it is important for
|
||||
the Rust compiler to know, on usage, the lifespan of the type. When the
|
||||
lifetime is not explicitly mentioned and the Rust Compiler cannot determine
|
||||
the lifetime of your type, the following error occurs.
|
||||
|
||||
```compile_fail,E0726
|
||||
use futures::executor::block_on;
|
||||
struct Content<'a> {
|
||||
title: &'a str,
|
||||
body: &'a str,
|
||||
}
|
||||
async fn create(content: Content) { // error: implicit elided
|
||||
// lifetime not allowed here
|
||||
println!("title: {}", content.title);
|
||||
println!("body: {}", content.body);
|
||||
}
|
||||
let content = Content { title: "Rust", body: "is great!" };
|
||||
let future = create(content);
|
||||
block_on(future);
|
||||
```
|
||||
|
||||
Specify desired lifetime of parameter `content` or indicate the anonymous
|
||||
lifetime like `content: Content<'_>`. The anonymous lifetime tells the Rust
|
||||
compiler that `content` is only needed until create function is done with
|
||||
it's execution.
|
||||
|
||||
The `implicit elision` meaning the omission of suggested lifetime that is
|
||||
`pub async fn create<'a>(content: Content<'a>) {}` is not allowed here as
|
||||
lifetime of the `content` can differ from current context:
|
||||
|
||||
```ignore (needs futures dependency)
|
||||
async fn create(content: Content<'_>) { // ok!
|
||||
println!("title: {}", content.title);
|
||||
println!("body: {}", content.body);
|
||||
}
|
||||
```
|
||||
|
||||
Know more about lifetime elision in this [chapter][lifetime-elision] and a
|
||||
chapter on lifetimes can be found [here][lifetimes].
|
||||
|
||||
[lifetime-elision]: https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html#lifetime-elision
|
||||
[lifetimes]: https://doc.rust-lang.org/rust-by-example/scope/lifetime.html
|
Loading…
Add table
Reference in a new issue