Description
For quantities, we allow arithmetic between different quantity types:
quantity q = isq::height(1 * m) + isq::width(1 * m); // results with `isq::length(2 * m)`
We had something similar for quantity points, but I am starting to think, if that is correct.
For example, for lengths, quantities represent a distance/delta between two points. Adding such deltas of length measured in different ways/dimensions makes sense and is required by the ISO 80000. Quantity points of length represent a distinct point in, for example, 3D space. The same point may have many representations from different origins in this 3D space, but they all still describe exactly the same point.
Subtracting two points of width
gives a delta of width
. However, what does it mean to subtract points of height
and width
or add a delta of width
to the point of height
?
quantity q1 = quantity_point{isq::height(1 * m)} - quantity_point{isq::width(1 * m)}; // results with ????
quantity_point qp1 = quantity_point{isq::height(1 * m)} + isq::width(1 * m); // results with ????
I start to think that the above should not compile. Do you agree?
The above examples contained quantities from different branches of the length hierarchy tree. What about the same branch?
quantity q2 = quantity_point{isq::height(1 * m)} - quantity_point{isq::length(1 * m)}; // results with ????
quantity q3 = quantity_point{isq::length(1 * m)} - quantity_point{isq::height(1 * m)}; // results with ????
quantity_point qp2 = quantity_point{isq::height(1 * m)} + isq::length(1 * m); // results with ????
quantity_point qp3 = quantity_point{isq::length(1 * m)} + isq::height(1 * m); // results with ????
A similar question to the above might be if it should be possible to define a point of height
with the origin being a point of length
or vice versa?
inline constexpr struct zero_length final : mp_units::absolute_point_origin<mp_units::isq::length> {} zero_length;
inline constexpr struct zero_height final : mp_units::absolute_point_origin<mp_units::isq::height> {} zero_height;
quantity_point qp4 = zero_length + isq::height(1 * m);
quantity_point qp5 = zero_height + isq::length(1 * m);
Please let me know your thoughts.
Activity