| //@ check-pass |
| // |
| // Regression test for issue #78632 |
| |
| #![crate_type = "lib"] |
| |
| pub trait Corge<T> { |
| type Fred; |
| } |
| |
| impl Corge<u8> for () { |
| type Fred = u32; |
| } |
| |
| pub trait Waldo { |
| type Quax; |
| } |
| |
| impl Waldo for u32 { |
| type Quax = u8; |
| } |
| |
| pub trait Grault |
| where |
| (): Corge<Self::Thud>, |
| { |
| type Thud; |
| fn bar(_: <() as Corge<Self::Thud>>::Fred) {} |
| } |
| |
| impl<T> Grault for T |
| where |
| T: Waldo, |
| (): Corge<T::Quax>, |
| <() as Corge<T::Quax>>::Fred: Waldo, |
| { |
| type Thud = u8; |
| } |
| |
| pub trait Plugh<I> { |
| fn baz(); |
| } |
| |
| #[derive(Copy, Clone, Debug)] |
| pub struct Qiz<T> { |
| foo: T, |
| } |
| |
| impl<T> Plugh<<() as Corge<T::Thud>>::Fred> for Qiz<T> |
| where |
| T: Grault, |
| (): Corge<T::Thud>, |
| { |
| fn baz() {} |
| } |
| |
| pub fn test() { |
| <Qiz<u32> as Plugh<u32>>::baz(); |
| } |