evaluate incorrectly because the *= operator took the right hand side by reference and thus experienced an aliasing problem. The other op= operators had similar problems and have also been fixed.