#![feature(type_alias_impl_trait)] mod a { type Foo = impl PartialEq<(Foo, i32)>; //~^ ERROR: unconstrained opaque type struct Bar; impl PartialEq<(Bar, i32)> for Bar { fn eq(&self, _other: &(Foo, i32)) -> bool { //~^ ERROR: `eq` has an incompatible type for trait 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() {}