| //@ check-pass |
| |
| // These types were previously considered equal as they are subtypes of each other. |
| // This has been changed in #118247 and we now consider them to be disjoint. |
| // |
| // In our test: |
| // |
| // * `for<'r> fn(fn(&'r u32))` |
| // * `fn(fn(&'a u32)` where `'a` is free |
| // |
| // These were considered equal as for `'a = 'static` subtyping succeeds in both |
| // directions: |
| // |
| // * `for<'r> fn(fn(&'r u32)) <: fn(fn(&'static u32))` |
| // * true if `exists<'r> { 'r: 'static }` (obviously true) |
| // * `fn(fn(&'static u32)) <: for<'r> fn(fn(&'r u32))` |
| // * true if `forall<'r> { 'static: 'r }` (also true) |
| |
| trait Trait {} |
| |
| impl Trait for for<'r> fn(fn(&'r ())) {} |
| impl<'a> Trait for fn(fn(&'a ())) {} |
| //~^ WARN conflicting implementations of trait `Trait` for type `for<'r> fn(fn(&'r ()))` [coherence_leak_check] |
| //~| WARN the behavior may change in a future release |
| |
| fn main() {} |