Julia handles this with the .= “fusing” assignment operator, which can fuse with any number of operations and function calls, not just a single +, to avoid allocation of large temporary objects (e.g. arrays) and fuse multiple passes over arrays.
(We explicitly considered a specialized in-place += operation at some point, but decided we needed a more general mechanism.)
I think it would be a lot harder to reason about the precision of operations if the same a+b expression gave a different result depending on the context where it was used. Clearer to promote one of the operands explicitly if you want a more accurate result.