Boost logo

Boost :

From: John Maddock (jm_at_[hidden])
Date: 2002-10-03 06:10:39


> Thanks BTW John for mentioning __int128. I did a few tests with MS's name
> mangling rules and it turns out even though they removed the keyword (and
> DEC Alpha) support in MSVC 6.0, it IS part of the name mangling. In fact,
> ALL the __int<N>'s have a separate name mangling that likely predates the
> addition of "bool" to ANSI C++ (though why they mangle bool as "_N" and
not
> "_B" has me stumped). The thing of note is, although the compiler is
> treating __int8 like char and __int16 like short, the object file and
linker
> are treating each as separate types, a difference between (C, E, F, G, H,
I,
> J, K) and (_D, _E, _F, _G, _H, _I, _J, _K, _L, _M) for the ISO and
> MS-specific types respectively. [No MS placeholder for long long
mangling,
> yet... or for signed/unsigned wchar_t (_W).] It's strange that the
compiler
> lets __int8 serve as a place holder for [signed] char IMHO too, especially
> when in function and typeid mangling they are separate types (and they
don't
> explicitly overload the basic_string, etc. templates for __int8).

I couldn't believe this at first, but after some investigating, you're
right: on VC6 the __intXX types are distinct from the standard C++ types!
However this has been fixed in VC7 - here __int32 is the same type as int
for example (this is the same behaviour as on Borland and Metrowerks BTW),
and in VC7.1 __int64 and long long are the same type.

John Maddock
http://ourworld.compuserve.com/homepages/john_maddock/index.htm


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk