Bitwise logic gmpxx.h problems
Emmanuel Thomé
Emmanuel.Thome at normalesup.org
Thu Jul 24 23:03:28 CEST 2008
On Thu, Jul 24, 2008 at 08:26:34PM +0200, Torbjorn Granlund wrote:
> Joppe Bos <jwbos at science.uva.nl> writes:
>
> I am not an experienced C++ hacker but the problem of these
> compiler errors are the following lines in gmpxx.h:
>
> __GMPP_DECLARE_COMPOUND_OPERATOR(operator&=)
> __GMPP_DECLARE_COMPOUND_OPERATOR(operator|=)
> __GMPP_DECLARE_COMPOUND_OPERATOR(operator^=)
>
> __GMPZZ_DEFINE_COMPOUND_OPERATOR(operator&=, __gmp_binary_and)
> __GMPZZ_DEFINE_COMPOUND_OPERATOR(operator|=, __gmp_binary_ior)
> __GMPZZ_DEFINE_COMPOUND_OPERATOR(operator^=, __gmp_binary_xor)
>
> Replacing the double PP and ZZ by single ones solves the problem.
>
> Do you base this on experiments, or on analysis from reading the code?
>
> There ought to be a reason for the ZZ variant, they are used just for
> bitwise ops.
perhaps precisely because without the patch you applied, it was wrong to
use the __GMPZ_ and _GMP_ variants ? The only difference between __GMPZZ_
and __GMPZ_ is the definition of compound operator with PODs as
right-hand types (if you follow the macro maze).
I _think_ that with the provided patch, it is safe to do s/ZZ/Z/ here. Or
there's some hidden can of worms somewhere that I haven't seen. Can you
use your cvs tree to track back these lines to their author ?
E.
More information about the gmp-bugs
mailing list