Hi Joris, It might be worth us including a 64 bit C++ constructor for mpz's on Windows 64. At the moment the constructor basically mimics mpz_set_ui, which explains the limitation.
Brian may be able to let us know whether it is even possible to do this (I don't know enough C++ to say for sure). Bill. On 24 October 2011 15:58, Joris Mooij <joris.mo...@gmail.com> wrote: > Hi, > > first of all, I would like to thank the developers of (GMP and) MPIR > for this great library. I am using it in my own open source library, > libDAI. > > When using MPIR in a Win64 environment, I encountered the problem that > the C++ wrappers do not seem to handle 64-bit integers, like size_t's > (or long long ints). This is illustrated by the following code, which > compiles fine under 64-bit linux, but fails to compile in a Windows 64 > environment: > > --- > #include <gmpxx.h> > #include <iostream> > using namespace std; > int main(void) { > size_t a = 5; > mpz_class b(a); > cout << b.get_ui() << endl; > return 0; > } > --- > > The reason seems to be that a size_t is a 64-bit integer in Win64, > whereas an unsigned long is only 32 bits in that environment, and the C > ++ wrapper classes in MPIR only provide a constructor for mpz_class > from (up to) 32-bit integer types. The C part of the library does > provide such functionality by the function mpz_init_set_ux(). > On 64-bit linux, however, an unsigned long is 64 bits, and therefore > the code runs fine. > > Now to me, this seems to be an undesirable cross-platform > incompatability. On the MPIR homepage, I read that two of the primary > goals of MPIR are: > - To maintain full interface support with GMP - MPIR is a drop-in > replacement for GMP. > - Support for building MPIR using Microsoft Visual Studio 2010 for use > in both 32-bit and 64-bit versions of Windows. > Such a platform dependence as discussed above seems to conflict with > these goals. > > So I have the following questions (sorry, I am new to this list, and > didn't read all the previous conversations, although I tried searching > for this issue on this list, without much success): > - Is this a known issue (I saw some other posts on this list and on > the internet which mention, so I suspect the answer would be "yes")? > - Is somebody working on it? > - Would it be difficult to add support for 64-bit integers to the C++ > wrappers also for platforms where an unsigned long is only 32 bits? > - Is there a reason that this hasn't been dealt with yet? > > Thanks for your time, > Joris > > -- > You received this message because you are subscribed to the Google Groups > "mpir-devel" group. > To post to this group, send email to mpir-devel@googlegroups.com. > To unsubscribe from this group, send email to > mpir-devel+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/mpir-devel?hl=en. > > -- You received this message because you are subscribed to the Google Groups "mpir-devel" group. To post to this group, send email to mpir-devel@googlegroups.com. To unsubscribe from this group, send email to mpir-devel+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/mpir-devel?hl=en.