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