On Tue, 16 Jul 2013 12:37:58 +0200, eles <e...@eles.com> wrote:

$cat test.cpp:

#include <iostream>

int main() {
        long long x = 1250000000 * 2;
        std::cout << x << std::endl;
        return 0;
}

g++-generated exe displays: -1794967296

$cat test.d:

import std.stdio;

int main() {
        long x = 1250000000 * 2;
        writefln("%d",x);
        return 0;
}

dmd- and gdc-generated exes display: -1794967296

compiling with g++ at least gives a warning:

warning: integer overflow in expression [-Woverflow]
long long x = 1250000000 * 2;

Both dmd and gdc do not complain in any way.

Isn't the promotion to int so awful? Better ideas? (yes, I know
about casting to long).

This is where integer suffixes can help:

long x = 1250000000L * 2;

--
Simen

Reply via email to