| #![feature(type_alias_impl_trait)] |
| |
| mod a { |
| type Foo = impl PartialEq<(Foo, i32)>; |
| |
| struct Bar; |
| |
| impl PartialEq<(Bar, i32)> for Bar { |
| #[define_opaque(Foo)] |
| fn eq(&self, _other: &(Foo, i32)) -> bool { |
| //~^ ERROR: `eq` has an incompatible type for trait |
| //~| ERROR: item does not constrain `a::Foo::{opaque#0}` |
| true |
| } |
| } |
| } |
| |
| mod b { |
| type Foo = impl PartialEq<(Foo, i32)>; |
| //~^ ERROR: unconstrained opaque type |
| |
| struct Bar; |
| |
| impl PartialEq<(Foo, i32)> for Bar { |
| fn eq(&self, _other: &(Bar, i32)) -> bool { |
| //~^ ERROR: `eq` has an incompatible type for trait |
| true |
| } |
| } |
| } |
| |
| fn main() {} |