| // run-pass | |
| // compile-flags: -Z chalk | |
| trait Foo { } | |
| trait Bar { | |
| type Item: Foo; | |
| } | |
| impl Foo for i32 { } | |
| impl Bar for i32 { | |
| type Item = i32; | |
| } | |
| fn only_foo<T: Foo>() { } | |
| fn only_bar<T: Bar>() { | |
| // `T` implements `Bar` hence `<T as Bar>::Item` must also implement `Bar` | |
| only_foo::<T::Item>() | |
| } | |
| fn main() { | |
| only_bar::<i32>(); | |
| only_foo::<<i32 as Bar>::Item>(); | |
| } |