use std::borrow::Borrow;
trait Foo {
fn bar();
}
struct S {}
impl <B: Borrow<S>> Foo for B {
fn bar(){
print!("bar");
}
}
struct D {}
impl <B: Borrow<D>> Foo for B {
fn bar(){
print!("bar")
}
}
fn main() {}
Код выше вызывает ошибку компилятора:
Compiling playground v0.0.1 (/playground)
error[E0119]: conflicting implementations of trait `Foo`:
--> src/main.rs:17:5
|
9 | impl <B: Borrow<S>> Foo for B {
| ----------------------------- first implementation here
...
17 | impl <B: Borrow<D>> Foo for B {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation
Я задал вопрос здесь Должен ли я реализовать черту дважды при ее реализации как для ссылочных, так и для нереферентных типов?
Принятый ответ хорошо работает, когда есть только одна структура, реализующая эту черту.
Как мне это сделать, если я хочу реализовать черту Foo
для Borrow<S>
и Borrow<D>
?