Forward compatibility hazard from coherence rules · Issue #23086 · rust-lang/rust (original) (raw)
The current coherence rules are too smart. I think we should consider adding some limits to rein it in. In particular, imagine that crate A defines:
And crate B then defines:
extern crate A; trait MyTrait { } impl<T:Clone> MyTrait for T { } impl MyTrait for A::Foo { }
This is currently accepted today, I believe. However, I think it should not be, because it means that now crate A cannot add an impl of Clone
for Foo
for fear of breaking crate B.
My proposed fix is to modify the coherence check so that you can't assume that a type from another crate won't implement a trait from another crate.
cc @aturon