
Hmm. I still don't understand the rationale for the extra multiplication operation. How is this any different from:
quantity<SI::meter> q(2);
It's a faux operation - the multiplication of a scalar times a unit (a class with no data members at all) decorates the scalar to produce a quantity of the appropriate unit and value type. The problem with using a raw value type for construction can be demonstrated here : using namespace SI; /// this is two meters quantity<length> q(2); ...some months later... using namespace CGS; /// uh oh - this is 2 centimeters now quantity<length> q(2); The way it's currently implemented, you incur a conversion in the constructor, but the code remains correct if the units are convertible and gives a compile time error if they are not... Matthias