I see, you're sensitive for the difficulties which might arise.
That's the thing I wanted to point out.
Maybe I was looking too far forward...
My first thought was to add attributes/qualifiers to the operands to improve
Then I realized that these attributes/qualifiers were related to the
operators, since multiplication and division use the same operands, but
while in one case it is associative and commutative, it isn't in the other.
I agree that all this leads too far.
But one thing creeps into my mind again:
I guess you'll always need an inverse operation:
A class which can handle multiplication will certainly require an inverse
operation like division.