I believe this could strictly be allowed when the struct and both traits are from the same module, this is not an exception that is currently made.
What you are running into is that having both of these implementations added would make it a backwards incompatible change to implement
S. This could definitely be allowed when
B are all defined in the same module, but if they were defined in separate modules, it would turn an operation (adding a trait implementation to a struct) that is assumed backwards-compatible into a backwards-incompatible operation.
This could either be addressed with specialization, or with the Rust compiler being fixed/modified to accept this specific case to allow a blanket implementation + one specific implementation where both the blanket trait, the specific trait and the struct are defined in the same module.