From: John Maddock (john_at_[hidden])
Date: 2004-10-15 05:14:18
There seems to be a lot of confusion about these macros, so let me try and
give you the full lowdown:
Indicates that [unsigned] long long is a valid type, use only when
overloading a function or specialising a template for all intrinsic integral
types (see is_integral for example). Do not use this macro (or long long)
if you want a 64-bit interal type.
Indicates that [unsigned] __int64 is a valid type, use only when overloading
a function or specialising a template for all intrinsic integral types (see
is_integral for example). Do not use this macro (or long long) if you want
a 64-bit interal type. Do not use if BOOST_HAS_LONG_LONG is set since
__int64 is the same type as long long on all compilers that have both.
Indicates that boost::int64_t and boost_uint64_t do not exist in
boost/cstdint.hpp. It's a defect macro because these types are documented
as existing; it doesn't indicate a defect in the compiler, although if we're
being picky, neither these types nor *any* of the exact width types in
boost/cstdint.hpp are required to be supported by C99. If you need a 64-bit
integer type then this macro is the one to check (and then use [u]int64_t).
Indicates that int64_t and uint64_t can not be used in integral constant
expressions (that includes their use as non-type template parameters).
Contrary to what Marcus suggested there are several compilers that have this
defect - a quick grep through the config system will show you which ones -
in fact until recently is was the exception rather than the rule for
compilers to accept types wider than int in integral constant expressions,
and especially in enum types.
Those macros are needed IMO, and should also be sufficient.
The macros BOOST_NO_INTRINSIC_INT64_T and BOOST_NO_INTRINSIC_UINT64_T appear
to have been removed, so no cleanup necessary :-)
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk