
AMDG Lewis Hyatt <lhyatt <at> princeton.edu> writes:
-What is your evaluation of the design?
I do disagree with previous comments on the evilness of the mutating value() method.
<snip>
We were going to replace it with quantity_reinterpret_cast<T&>(q). This make the fact that it is dangerous more obvious in addition to allowing searches.
Also, quantity<> should pass through operator++ and operator-- in addition to the other arithmetic operators.
Will do.
<snip>
I was surprised by the following behavior:
#include <iostream> #include <boost/units/io.hpp> #include <boost/units/systems/si.hpp> #include <boost/units/systems/cgs.hpp> #include <boost/units/systems/si/prefixes.hpp> using namespace boost::units;
int main() {
quantity<CGS::force> F0 = 20 * CGS::dyne;
quantity<SI::force> F1 = quantity_cast<SI::force>(F0); quantity<SI::force> F2 = quantity_cast<SI::force>(20 * CGS::dyne);
quantity<SI::force> F3(F0); //quantity<SI::force> F4 = F0;
This requires a conversion. The construtor is explicit.
//quantity<SI::force> F5(20 * CGS::dyne);
Ouch. I noticed this before but never fixed it. I'll take care of it immidiately
//quantity<SI::force> F6 = 20 * CGS::dyne;
Again, the constructor is explicit.
<snip>
Also problematic is F2, which does compile, albeit with a warning, but then does the wrong thing at run time. The output of this program is:
1e-05 m kg s^(-2) 0 m kg s^(-2) 1e-05 m kg s^(-2)
This appears to be related to the fact that in the initialization of F0, there is an implicit conversion from the int (20) to double.
<snip>
I'll fix it.
-What is your evaluation of the documentation?
The large number of examples is excellent. The documentation needs a lot more substance to it, particularly explaining surprising features of implicit conversions.
Better: fix the problems.
-What is your evaluation of the potential usefulness of the library?
One concern I have, is that I use a lot of C++ wrappers over legacy C libraries such as CLAPACK and ATLAS.
<snip>
If you are doing that I would put the assertion at the point where you cast.
<snip>
Thank you. In Christ, Steven Watanabe