Your reply provided the key, thank you.
I misunderstood what multiply_typeof_helper was for. It's like common_type<> in C++0X, but its more specialized for each kind of operator.
Which is obviously important for units.
My program compiles and runs now. Thanks again.
terry
BTW, the return statement is not recursive, because it swaps the lhs and rhs.
// vector * T
template inline
typename boost::units::multiply_typeof_helper >::type
operator*(const vector&lhs, const T2& rhs)
{ return rhs * lhs; }
Since multiply_typeof_helper is really just a glorified version of typeof(T1()*T2()), what you're saying here is that the return type of the product of a vector and a scalar is the return type of the product of a vector and a scalar. You need to define the top-level multiply operation; define it something like this :
// vector * T
template inline
vector::type>
operator*(const vector&lhs, const T2& rhs)
{ //return rhs * lhs; this return statement is also wrong, since it is recursive, defining the returned value in terms of the operator itself...}
Cheers,
Matthias