Forbid lifetime elision in let position impl Trait
This is consistent with types.
This commit is contained in:
parent
4201fd273e
commit
f97070db90
9 changed files with 95 additions and 52 deletions
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
|
|
|||
|
|
@ -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() {}
|
||||
|
|
|
|||
|
|
@ -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`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue