File tree Expand file tree Collapse file tree 2 files changed +61
-0
lines changed Expand file tree Collapse file tree 2 files changed +61
-0
lines changed Original file line number Diff line number Diff line change 1+ // Test for issue #57362, ensuring that the self ty is shown in cases of higher-ranked lifetimes
2+ // conflicts: the `expected` and `found` trait refs would otherwise be printed the same, leading
3+ // to confusing notes such as:
4+ // = note: expected type `Trait`
5+ // found type `Trait`
6+
7+ // from issue #57362
8+ trait Trait {
9+ fn f ( self ) ;
10+ }
11+
12+ impl < T > Trait for fn ( & T ) {
13+ fn f ( self ) {
14+ println ! ( "f" ) ;
15+ }
16+ }
17+
18+ fn f ( ) {
19+ let a: fn ( _) = |_: & u8 | { } ;
20+ a. f ( ) ; //~ ERROR not general enough
21+ }
22+
23+ // extracted from a similar issue: #57642
24+ trait X {
25+ type G ;
26+ fn make_g ( ) -> Self :: G ;
27+ }
28+
29+ impl < ' a > X for fn ( & ' a ( ) ) {
30+ type G = & ' a ( ) ;
31+
32+ fn make_g ( ) -> Self :: G {
33+ & ( )
34+ }
35+ }
36+
37+ fn g ( ) {
38+ let x = <fn ( & ( ) ) >:: make_g ( ) ; //~ ERROR not general enough
39+ }
40+
41+ fn main ( ) { }
Original file line number Diff line number Diff line change 1+ error: implementation of `Trait` is not general enough
2+ --> $DIR/issue-57362.rs:20:7
3+ |
4+ LL | a.f(); //~ ERROR not general enough
5+ | ^
6+ |
7+ = note: `Trait` would have to be implemented for the type `fn(&u8)`
8+ = note: but `Trait` is actually implemented for the type `for<'r> fn(&'r u8)`
9+
10+ error: implementation of `X` is not general enough
11+ --> $DIR/issue-57362.rs:38:13
12+ |
13+ LL | let x = <fn (&())>::make_g(); //~ ERROR not general enough
14+ | ^^^^^^^^^^^^^^^^^^
15+ |
16+ = note: `X` would have to be implemented for the type `for<'r> fn(&'r ())`
17+ = note: but `X` is actually implemented for the type `fn(&'0 ())`, for the specific lifetime `'0`
18+
19+ error: aborting due to 2 previous errors
20+
You can’t perform that action at this time.
0 commit comments