Implement arithmetic operators with a macro #4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
We realised the previous implementation of operators *, /, - for owned types (instead of references) broke some things. For instance, this line in poly-commit stopped compiling.
In the specific example given, the reason for the new failure is that, when operators were only implemented for &poly / &poly, the compiler implicitly converted the call
f_poly.div(&z_poly);
into(&f_poly).div(&z_poly);
. But after we had added poly / poly, the compiler was not clever enough to add the reference and complained that poly / RHS should have RHS of type poly (not &poly).Long story short, the best way to ensure the new operator definitions are not a breaking change is to implement poly / poly, poly / &poly and &poly / poly (all of them falling back to the honestly defined &poly / &poly). Since that had to be done for several operators, a macro seemed like the best approach.