| //@ check-pass | |
| #![allow(dead_code)] | |
| trait Make { | |
| type Out; | |
| fn make() -> Self::Out; | |
| } | |
| impl Make for () { | |
| type Out = (); | |
| fn make() -> Self::Out {} | |
| } | |
| // Also make sure we don't hit an ICE when the projection can't be known | |
| fn f<T: Make>() -> <T as Make>::Out { loop {} } | |
| // ...and that it works with a blanket impl | |
| trait Tr { | |
| type Assoc; | |
| } | |
| impl<T: Make> Tr for T { | |
| type Assoc = (); | |
| } | |
| fn g<T: Make>() -> <T as Tr>::Assoc { } | |
| fn main() {} |