未验证 提交 cf24b6bc 编写于 作者: D Dylan DPC 提交者: GitHub

Rollup merge of #67723 - ldm0:E0477, r=Dylan-DPC

Add error code explanation for E0477

Part of #61137
......@@ -238,6 +238,7 @@
E0466: include_str!("./error_codes/E0466.md"),
E0468: include_str!("./error_codes/E0468.md"),
E0469: include_str!("./error_codes/E0469.md"),
E0477: include_str!("./error_codes/E0477.md"),
E0478: include_str!("./error_codes/E0478.md"),
E0491: include_str!("./error_codes/E0491.md"),
E0492: include_str!("./error_codes/E0492.md"),
......@@ -531,7 +532,6 @@
E0474, // captured variable `..` does not outlive the enclosing closure
E0475, // index of slice outside its lifetime
E0476, // lifetime of the source pointer does not outlive lifetime bound...
E0477, // the type `..` does not fulfill the required lifetime...
E0479, // the type `..` (provided as the value of a type parameter) is...
E0480, // lifetime of method receiver does not outlive the method call
E0481, // lifetime of function argument does not outlive the function call
......
The type does not fulfill the required lifetime.
Erroneous code example:
```compile_fail,E0477
use std::sync::Mutex;
struct MyString<'a> {
data: &'a str,
}
fn i_want_static_closure<F>(a: F)
where F: Fn() + 'static {}
fn print_string<'a>(s: Mutex<MyString<'a>>) {
i_want_static_closure(move || { // error: this closure has lifetime 'a
// rather than 'static
println!("{}", s.lock().unwrap().data);
});
}
```
In this example, the closure does not satisfy the `'static` lifetime constraint.
To fix this error, you need to double check the lifetime of the type. Here, we
can fix this problem by giving `s` a static lifetime:
```
use std::sync::Mutex;
struct MyString<'a> {
data: &'a str,
}
fn i_want_static_closure<F>(a: F)
where F: Fn() + 'static {}
fn print_string(s: Mutex<MyString<'static>>) {
i_want_static_closure(move || { // error: this closure has lifetime 'a
// rather than 'static
println!("{}", s.lock().unwrap().data);
});
}
```
......@@ -8,3 +8,4 @@ LL | foo::<&'a i32>();
error: aborting due to previous error
For more information about this error, try `rustc --explain E0477`.
......@@ -8,3 +8,4 @@ LL | let x = foo::<&'a u32>();
error: aborting due to previous error
For more information about this error, try `rustc --explain E0477`.
......@@ -76,4 +76,5 @@ LL | let a: Box<dyn Gettable<Foo>> = t;
error: aborting due to 7 previous errors
For more information about this error, try `rustc --explain E0277`.
Some errors have detailed explanations: E0277, E0477.
For more information about an error, try `rustc --explain E0277`.
......@@ -33,4 +33,5 @@ LL | assert_send::<Box<dyn Dummy + 'a>>();
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0277`.
Some errors have detailed explanations: E0277, E0477.
For more information about an error, try `rustc --explain E0277`.
......@@ -48,3 +48,4 @@ LL | assert_send::<*mut &'a isize>();
error: aborting due to 6 previous errors
For more information about this error, try `rustc --explain E0477`.
......@@ -8,3 +8,4 @@ LL | Foo.some_method::<&'a isize>();
error: aborting due to previous error
For more information about this error, try `rustc --explain E0477`.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册