Forbid lifetime elision in let position impl Trait

This is consistent with types.
This commit is contained in:
Matthew Jasper 2020-05-10 12:18:55 +01:00
parent 4201fd273e
commit f97070db90
9 changed files with 95 additions and 52 deletions

View file

@ -5,13 +5,11 @@
struct A<'a>(&'a ());
trait Trait<T> {
}
trait Trait<T> {}
impl<T> Trait<T> for () {
}
impl<T> Trait<T> for () {}
fn main() {
let x: impl Trait<A> = (); // FIXME: The error doesn't seem correct.
//~^ ERROR: opaque type expands to a recursive type
let x: impl Trait<A> = ();
//~^ ERROR: missing lifetime specifier
}

View file

@ -1,11 +1,15 @@
error[E0720]: opaque type expands to a recursive type
--> $DIR/issue-60473.rs:15:12
error[E0106]: missing lifetime specifier
--> $DIR/issue-60473.rs:13:23
|
LL | let x: impl Trait<A> = (); // FIXME: The error doesn't seem correct.
| ^^^^^^^^^^^^^ expands to a recursive type
LL | let x: impl Trait<A> = ();
| ^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | fn main<'a>() {
LL | let x: impl Trait<A<'a>> = ();
|
= note: type resolves to itself
error: aborting due to previous error
For more information about this error, try `rustc --explain E0720`.
For more information about this error, try `rustc --explain E0106`.

View file

@ -4,8 +4,8 @@
#![allow(incomplete_features)]
pub fn run() {
let _foo: Box<impl Copy + '_> = Box::new(()); // FIXME: The error doesn't much make sense.
//~^ ERROR: opaque type expands to a recursive type
let _foo: Box<impl Copy + '_> = Box::new(());
//~^ ERROR: missing lifetime specifier
}
fn main() {}

View file

@ -1,11 +1,15 @@
error[E0720]: opaque type expands to a recursive type
--> $DIR/issue-67166.rs:7:19
error[E0106]: missing lifetime specifier
--> $DIR/issue-67166.rs:7:31
|
LL | let _foo: Box<impl Copy + '_> = Box::new(()); // FIXME: The error doesn't much make sense.
| ^^^^^^^^^^^^^^ expands to a recursive type
LL | let _foo: Box<impl Copy + '_> = Box::new(());
| ^^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | pub fn run<'a>() {
LL | let _foo: Box<impl Copy + 'a> = Box::new(());
|
= note: type resolves to itself
error: aborting due to previous error
For more information about this error, try `rustc --explain E0720`.
For more information about this error, try `rustc --explain E0106`.