| // Regression test for #137287 |
| |
| mod defining_scope { |
| use super::*; |
| pub type Alias<T> = impl Sized; |
| //~^ ERROR unconstrained opaque type |
| //~| ERROR `impl Trait` in type aliases is unstable |
| |
| pub fn cast<T>(x: Container<Alias<T>, T>) -> Container<T, T> { |
| x |
| //~^ ERROR mismatched types |
| } |
| } |
| |
| struct Container<T: Trait<U>, U> { |
| x: <T as Trait<U>>::Assoc, |
| } |
| |
| trait Trait<T> { |
| type Assoc; |
| } |
| |
| impl<T> Trait<T> for T { |
| type Assoc = Box<u32>; |
| } |
| impl<T> Trait<T> for defining_scope::Alias<T> { |
| //~^ ERROR conflicting implementations of trait `Trait<_>` |
| type Assoc = usize; |
| } |
| |
| fn main() { |
| let x: Box<u32> = defining_scope::cast::<()>(Container { x: 0 }).x; |
| } |