```rust trait Bar { type Item; type Assoc: AsRef<[Self::Item]>; } struct Foo<T: Bar> { t: <T as Bar>::Assoc, } impl<T: Bar<Item = u32>> Foo<T> where <T as Bar>::Assoc: AsRef<[u32]>, { fn hello(&self) { println!("{}", self.t.as_ref().len()); } } fn main() {} ``` Since `<T as Bar>::Assoc` can project to `[u32]` or `<[T as Bar::Item]>` (which is `[u32]`). I found this in [rand-core 0.5.x](https://github.com/rust-random/rand/blob/d877ed528248b52d947e0484364a4e1ae59ca502/rand_core/src/block.rs#L173). This is not present in the most recent rand-core version afaict, but many crates use rand-core 0.5.x as a dep.