| #### Note: this error code is no longer emitted by the compiler. |
| |
| The type does not fulfill the required lifetime. |
| |
| Erroneous code example: |
| |
| ```compile_fail |
| 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 || { // ok! |
| println!("{}", s.lock().unwrap().data); |
| }); |
| } |
| ``` |