From: Peter V. <Pet...@es...> - 2002-02-15 14:35:24
|
> template <class T, class S> > void vnl_c_vector_rms_norm(T const *p, unsigned n, S *out) > { > vnl_c_vector_two_norm_squared(p, n, out); > *out /= n; > typedef typename vnl_numeric_traits<S>::real_t real_t; > *out = (S)(vcl_sqrt(real_t(*out))); // trouble is here > } Try replacing that last line with *out = S(vcl_sqrt(real_t(*out))); Probably, (vnl_rational)(x) with x of type double is not seen as an "explicit" call of the "double" constructor, while vnl_rational(x) is. (It is used that way a few lines further down.) Peter. |