It's balancing what is or isn't a breaking change. "Just error if it happens" makes adding an implementation a breaking (SemVer incompatible) change, which is too confining (libraries would stagnate or fragment with many major versions).
For this particular case, String won't ever implement Copy. But there is currently no way for it to opt into that guarantee so that your two implementations are accepted. There may be a way eventually.
In the meanwhile, you need to newtype String or avoid the blanket implementation.