Rollup merge of #74286 - PankajChaudhary5:E0688, r=GuillaumeGomez

Added detailed error code explanation for issue E0688 in Rust compiler.

Added proper error explanation for issue E0688 in the Rust compiler.
Error Code E0688

Sub Part of Issue #61137

r? @GuillaumeGomez
This commit is contained in:
Manish Goregaokar 2020-07-13 22:23:15 -07:00 committed by GitHub
commit 9a1df31d55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 38 additions and 1 deletions

View File

@ -383,6 +383,7 @@ E0669: include_str!("./error_codes/E0669.md"),
E0670: include_str!("./error_codes/E0670.md"),
E0671: include_str!("./error_codes/E0671.md"),
E0687: include_str!("./error_codes/E0687.md"),
E0688: include_str!("./error_codes/E0688.md"),
E0689: include_str!("./error_codes/E0689.md"),
E0690: include_str!("./error_codes/E0690.md"),
E0691: include_str!("./error_codes/E0691.md"),
@ -616,7 +617,6 @@ E0768: include_str!("./error_codes/E0768.md"),
E0640, // infer outlives requirements
// E0645, // trait aliases not finished
E0667, // `impl Trait` in projections
E0688, // in-band lifetimes cannot be mixed with explicit lifetime binders
// E0694, // an unknown tool name found in scoped attributes
// E0702, // replaced with a generic attribute input check
// E0707, // multiple elided lifetimes used in arguments of `async fn`

View File

@ -0,0 +1,36 @@
In-band lifetimes were mixed with explicit lifetime binders.
Erroneous code example:
```compile_fail,E0688
#![feature(in_band_lifetimes)]
fn foo<'a>(x: &'a u32, y: &'b u32) {} // error!
struct Foo<'a> { x: &'a u32 }
impl Foo<'a> {
fn bar<'b>(x: &'a u32, y: &'b u32, z: &'c u32) {} // error!
}
impl<'b> Foo<'a> { // error!
fn baz() {}
}
```
In-band lifetimes cannot be mixed with explicit lifetime binders.
For example:
```
fn foo<'a, 'b>(x: &'a u32, y: &'b u32) {} // ok!
struct Foo<'a> { x: &'a u32 }
impl<'a> Foo<'a> {
fn bar<'b,'c>(x: &'a u32, y: &'b u32, z: &'c u32) {} // ok!
}
impl<'a> Foo<'a> { // ok!
fn baz() {}
}
```

View File

@ -24,3 +24,4 @@ LL | impl<'b> Foo<'a> {
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0688`.