
Oh, okay, missed that. So I probably don't fully understand what the units library is doing but I find this behavior a bit worrisome.
[kbelco@wsblade001 ~]$ cat test3.cpp
int main(int, char **) { quantityfahrenheit::temperature f(212 * fahrenheit::temperature()); quantitycelsius::temperature c(f); std::cout << f << std::endl; std::cout << c << std::endl; return 0; }
[kbelco@wsblade001 ~]$ ./a.out 212 F 117.778 C
If 'f' is 212ºF, why, when converting it to ºC, do I end up at 117 and change? Is this really what we should expect? It seems that this very simple use case produces unexpected, and to a casual user wrong, results. I understand the need for complexity but it seems to show up very early in the user experience.
Because a temperature change of 212ºF is equal to a temperature change of 117.778ºC = (5/9)*212. What would you expect the following to do:
int main(int, char **)
{
quantityfahrenheit::temperature f(32*fahrenheit::temperature());
quantitycelsius::temperature c(0*celsius::temperature());
std::cout << 2.*f << std::endl;
std::cout << 2.*c << std::endl;
std::cout << f+quantityfahrenheit::temperature(c) << std::endl;
std::cout << quantitycelsius::temperature(f)+c << std::endl;
return 0;
}
? What does multiplying an absolute temperature by 2 mean? Should the last two lines give me 32+32 = 64 and 0+0 = 0? Why would the order of conversion matter? I understand the desire for temperature to equate to the common interpretation, but this approach quickly becomes problematic when you allow arithmetic operations. The same issue arises in std::chrono in differentiating between specific time points and durations. If you want a temperature point, use quantity< absolutefahrenheit::temperature >. This will have the added benefit of allowing conversions but disallowing operations that don't make sense... Some code:
#include <iostream>
#include