The original code is as follows, what I gave is merely a distilled test case:

\n\tinline double To_double() const\n\t{\n\t\tsize_t len = 0;\n\t\tconst char *s = ptr(&len);\n\t\tchar sz[ISIZE+FSIZE+1];\n\t\tmemcpy(sz, s, len);\n\t\tsz[len] = 0;\n\t\tdouble d = atof(sz);\n\t\treturn d / pow(10.0, FSIZE);\n\t}\n


sz is being set up with "123456". FSIZE is 3. I was comparing 123.456 with the results of To_double. Again, this works fine on gcc 2.95.mumble and VC++6.