implementation, потому что аргумент структуры не меняется, а так-же меняется аргумент трейта?
На практике хотел реализовать трейт Index с аргементами T, Range<T>, и RangeFull,
соответственно для Range<T> (*1*) всё ок, а для не дженерик структуры RangeFull (*3*) не получилось...
В 2: impl<T> Trait<T> for A {} // при T=Bar<i32>, A: Trait<Bar<i32>> impl<T> Trait<Bar<T>> for A {} // при T = i32, A: Trait<Bar<i32>> — конфликт В 3: impl<T> Trait<T> for B<T> {} // при T=Foo, Bar<Foo>: Trait<Foo> impl<T> Trait<Foo> for B<T> {} // при T=Foo, Bar<Foo>: Trait<Foo> — конфликт
Мдауж, интересно и неприятно. Возможно RangeFull должен быть определён так: struct RangeFull<T>(PhantomData<T>); Жаль что это ломающее изменение
Обсуждают сегодня