#include <iostream> int main () { unsigned short us = ~0; unsigned int ui = 1; unsigned int res = ui + us; std::cerr << "res: " << res << ", ui: " << ui << ", us: 0x" << std::hex << us << "\n"; res = 1; res = res + us; std::cerr << "res: " << res << ", ui: " << ui << ", us: 0x" << std::hex << us << "\n"; return 0; }
gets you: ~/ootbc/members/src$ g++ foo.cc ~/ootbc/members/src$ a.out res: 65536, ui: 1, us: 0xffff res: 10000, ui: 1, us: 0xffff Compiler: ~/ootbc/members/src$ gcc -v Reading specs from /mnt/export/local/bin/../lib/gcc/i686-pc-linux-gnu/3.4.0/specs Configured with: ../gcc/configure --prefix=/site Thread model: posix gcc version 3.4.0 Appears to be an optimization error, and non-update (first) version gives correct result. -- Summary: Mixed-type arithmetic error Product: gcc Version: 3.4.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: igodard at pacbell dot net CC: gcc-bugs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23807