Boost logo

Boost Users :

Subject: Re: [Boost-users] [math] Warning in math/common_factor_rt.hpp
From: John Maddock (boost.regex_at_[hidden])
Date: 2010-07-01 13:50:43


> Investigating a bit further, I discovered that we are actually passing
> -funsigned-char to the compiler. This causes a problem because:
>
> common_factor_rt.hpp:329
> BOOST_PRIVATE_GCD_SF( char, unsigned char ); // should work even if
> unsigned
>
> This macro expands into:
> common_factor_rt.hpp:317
> #define BOOST_PRIVATE_GCD_SF( St, Ut ) \
> template < > struct gcd_optimal_evaluator<St> \
> { St operator ()( St a, St b ) const { Ut const a_abs = \
> static_cast<Ut>( a < 0 ? -a : +a ), b_abs = static_cast<Ut>( \
> b < 0 ? -b : +b ); return static_cast<St>( \
> gcd_optimal_evaluator<Ut>()(a_abs, b_abs) ); } }
>
> The expression 'a < 0' is always false if 'a' is unsigned, so the
> compiler issues a warning (if warnings are turned high enough).
>
> My impression is that this code should be considered incorrect -
> making assumptions about the signed-ness of char is not portable. I
> do not understand why the comment suggests that this "should work".

Actually I think in this case the code will work correctly, but in any case
this patch should fix things:
https://svn.boost.org/trac/boost/changeset/63496/trunk/boost/math/common_factor_rt.hpp

HTH, John.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net