On Tue, 19 Feb 2013 03:13:14 +0000 (GMT) Anastasios Tsiolakidis <[email protected]> wrote:
> Hello, > > this is perhaps something for d.learning, except that I don't see > how! I found a small D program on Facebook > http://pastebin.ca/2315433 , and compiling it with all 3 > implementations on my Ubuntu 12.10 gives this "common" eror, in 2 > implementations with more verbose output > > > h3.d(72): Error: cannot implicitly convert expression (g0.length) of > type ulong to int > > > On Windows 7-64 however it compiles just fine with dmd2. From a > discussion on this list I concluded this error is "fundamental" and > don't expect it to be configurable with a compiler switch or > whatever. Nor do I expect the dmd package to ship with fundamentally > different config files on windows and linux. What's going on? Thanks > > AT > Line 72 should be: size_t n = g0.length; or just: auto n = g0.length; // Automatically infer the correct type There may be some other int's that should be size_t as well. This is because array lengths are size_t: the unsigned native word size of the system. 32-bit (ie uint) on 32-bit systems, and 64-bit (ie ulong) on 64-bit systems. Although it sounds like a bug that Win64 *isn't* giving you an error. (D's Win64 support is much newer than Linux64). Really, it's arguable that it should even be an error on 32-bit, because the full range of an unsigned int doesn't fit into a signed int, but my understanding is that D is somewhat lax about signed/unsigned matters for the sake of convenience.
