
"Deane Yang" <deane_yang@yahoo.com> wrote in message news:ecdc0m$n5l$1@sea.gmane.org...
Andy Little wrote:
This brings up a good question. Say you have two objects:
meters m = 1; feet f = 2;
What is the type (or unit) of the following expression?
m + f;
I apologize for repeating myself, but I want this to fail to compile. I do not want implicit conversion of units. I believe I am not completely alone in this view. Personally I love implicit unit conversions. :-) I can add a function to prevent them, but you will have to apply that explicitly:
T b = no_cast(a);
or some such.
How's that?
regards Andy Little
For addition you would need to do this:
nocast(a) + nocast(b);
for multiplication
nocast(a) * nocast(b);
You could make this a general purpose utility:
template <typename T> struct no_caster{ T t; /*...*/ };
template <typename T1, typename T2> typename boost:enable_if< boost::is_same<T1, T2>,T1
::type
operator Op (nocaster<T1> ,nocaster<T2>);
My main objection to this is that I am pretty sure that a quantity/units library that does not do implicit unit conversion is a *lot* easier to implement than one that does. And it's hard for me to believe that a library that does automatic unit conversion doesn't have inside of it a simpler non-automatic unit conversion library. So implementing explicit unit conversion on top of an implicit conversion library seems, well, backwards.
Not really. It is much more difficult to *somehow* enable implicit unit conversion for those (like me ) that want it, than it is to provide a means to disable it, locally, for those that don't want it. regards Andy Little