mirror of https://github.com/rust-lang/rust
28 lines
1.0 KiB
Rust
28 lines
1.0 KiB
Rust
//@ 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.
|
|
//
|
|
// * `for<'a, 'b> fn(&'a u32, &'b u32)`
|
|
// * `for<'c> fn(&'c u32, &'c u32)`
|
|
//
|
|
// These types are subtypes of each other as:
|
|
//
|
|
// * `'c` can be the intersection of `'a` and `'b` (and there is always an intersection)
|
|
// * `'a` and `'b` can both be equal to `'c`
|
|
|
|
trait Trait {}
|
|
impl Trait for for<'a, 'b> fn(&'a u32, &'b u32) {}
|
|
impl Trait for for<'c> fn(&'c u32, &'c u32) {
|
|
//~^ WARN conflicting implementations of trait `Trait` for type `for<'a, 'b> fn(&'a u32, &'b u32)` [coherence_leak_check]
|
|
//~| WARN the behavior may change in a future release
|
|
//
|
|
// Note in particular that we do NOT get a future-compatibility warning
|
|
// here. This is because the new leak-check proposed in [MCP 295] does not
|
|
// "error" when these two types are equated.
|
|
//
|
|
// [MCP 295]: https://github.com/rust-lang/compiler-team/issues/295
|
|
}
|
|
|
|
fn main() {}
|