-
Notifications
You must be signed in to change notification settings - Fork 13k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use erased self type when autoderefing for trait error suggestion
- Loading branch information
1 parent
77e24f9
commit d1380a1
Showing
3 changed files
with
52 additions
and
7 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
// issue:113951 | ||
|
||
trait Foo<'x, T> {} | ||
|
||
trait RefFoo<T> { | ||
fn ref_foo(&self); | ||
} | ||
|
||
impl<T> RefFoo<T> for T | ||
where | ||
for<'a> &'a mut Vec<&'a u32>: Foo<'static, T>, | ||
{ | ||
fn ref_foo(&self) {} | ||
} | ||
|
||
fn coerce_lifetime2() { | ||
<i32 as RefFoo<i32>>::ref_foo(unknown); | ||
//~^ ERROR cannot find value `unknown` in this scope | ||
//~| ERROR the trait bound `for<'a> &'a mut Vec<&'a u32>: Foo<'static, i32>` is not satisfied | ||
} | ||
|
||
fn main() {} |
27 changes: 27 additions & 0 deletions
27
tests/ui/traits/dont-autoderef-ty-with-escaping-var.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
error[E0425]: cannot find value `unknown` in this scope | ||
--> $DIR/dont-autoderef-ty-with-escaping-var.rs:17:35 | ||
| | ||
LL | <i32 as RefFoo<i32>>::ref_foo(unknown); | ||
| ^^^^^^^ not found in this scope | ||
|
||
error[E0277]: the trait bound `for<'a> &'a mut Vec<&'a u32>: Foo<'static, i32>` is not satisfied | ||
--> $DIR/dont-autoderef-ty-with-escaping-var.rs:17:35 | ||
| | ||
LL | <i32 as RefFoo<i32>>::ref_foo(unknown); | ||
| ----------------------------- ^^^^^^^ the trait `for<'a> Foo<'static, i32>` is not implemented for `&'a mut Vec<&'a u32>` | ||
| | | ||
| required by a bound introduced by this call | ||
| | ||
note: required for `i32` to implement `RefFoo<i32>` | ||
--> $DIR/dont-autoderef-ty-with-escaping-var.rs:9:9 | ||
| | ||
LL | impl<T> RefFoo<T> for T | ||
| ^^^^^^^^^ ^ | ||
LL | where | ||
LL | for<'a> &'a mut Vec<&'a u32>: Foo<'static, T>, | ||
| --------------- unsatisfied trait bound introduced here | ||
|
||
error: aborting due to 2 previous errors | ||
|
||
Some errors have detailed explanations: E0277, E0425. | ||
For more information about an error, try `rustc --explain E0277`. |