Closed compiler-errors closed 7 months ago
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]).
<T as Bar>::Assoc
[u32]
<[T as Bar::Item]>
I found this in rand-core 0.5.x.
This is not present in the most recent rand-core version afaict, but many crates use rand-core 0.5.x as a dep.
Related #4
Related #84 (the supertrait version of this)
fixed by https://github.com/rust-lang/rust/pull/119106
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.
This is not present in the most recent rand-core version afaict, but many crates use rand-core 0.5.x as a dep.