|Subject:||0+ overload converts to signed|
When a Math::GMP object is passed to an XS module, SvUV gets sucked into intify() by the 0+ overload, which makes incorrect values. E.g. 9228015158111050049 turns into 4643121256274241. Interestingly, removing the 0+ overload entirely fixes the problem and the tests still pass. I note that Math::GMPz does not use a 0+ overload. However, almost all the tests in the test suite are on tiny numbers, so I don't think these paths are getting exercised at all. I also would consider making uintify and intify use UV / IV, so users from Perl don't have to work around sizeof(long) != sizeof(IV).