У меня есть 2 черты, черта A является подтрейтом для черты B:
pub trait A {...}
pub trait B {...} //A+some methods
И автотрейт для всего, что не u8:
pub auto trait IsNotU8 {}
impl !IsNotU8 for u8 {}
Реализация A для u8:
impl A for Vec<u8> {...}
И поскольку для всех типов, реализующих A, все остальные методы в B ничего не делают, я реализую B для всех типов, реализующих A:
impl<K: A> B for K {...} //already implemented here
И для Ve c :
impl<V: B + IsNotU8> B for Vec<V> {...} //ERROR already implemented
Я conflicting implementation for `std::vec::Vec<_>`
даже подумал, что вторая реализация работает только для значений, не являющихся u8, а первая реализация предназначена только для типов, реализующих A. Поскольку только Ve c реализует A, это не должно быть проблемой, потому что ни один из типов не перекрывается.
Почему я получаю эту ошибку? Когда я не использую косвенную реализацию B для A, это работает, но с этим нет. Это ошибка в компиляторе при использовании автоматических черт?