impl<T> TraitFoo for T where T: TraitBar { ... } ってやった後、 impl<T> TraitFoo for T where T: TraitBaz { ... } と別のトレイトも実装しようとすると conflicting implementations for trait `TraitFoo` と怒られる。TraitBarとTraitBazが全く関係が無いもの(例えばstd::net::ToSocketAddrsとstd::ops::Add)であっても駄目。 今、TraitBarとTraitBaz両方を実装した型が無くても、この先作られるかもしれないから、という理屈?らしい。
じゃあ impl TraitFoo for TraitBar {...} とすると、コンパイルは通るけどTraitBarを実装した型はTraitFooを実装したことにならないので、 意味が無い。