Boost logo

Boost :

From: John Maddock (john_at_[hidden])
Date: 2005-07-18 07:33:52


> The first few lines of suffix.hpp currently look like this:
>
> #include <limits.h>
> # if !defined(BOOST_HAS_LONG_LONG)
> \
> && !defined(BOOST_MSVC) && !defined(__BORLANDC__) \
> && (defined(ULLONG_MAX) || defined(ULONG_LONG_MAX) ||
> defined(ULONGLONG_MAX))
> # define BOOST_HAS_LONG_LONG
> #endif
>
> What is the reason for this code being there? Isn't it enough to test for
> this in the platform/compiler/stdlib config?

The code is intended to determine only whether the compiler has a long long
data type, *not* whether there is any library support for it (although there
must be some for the limits macros to be defined).

> I'm asking this question because currently stdlib/libstdcpp3.hpp
> explicitely turns off BOOST_HAS_LONG_LONG when the library indicates that
> there is no support for long long, and this is foiled by the code in
> suffix.hpp, which turns on BOOST_HAS_LONG_LONG again. (And this causes
> errors with gcc-3.3.x on Tru64.)
>
> Maybe we need two config macros for this? One for
> BOOST_COMPILER_HAS_LONG_LONG, and one for BOOST_STDLIB_HAS_LONG_LONG?
>
> Comments or thoughts, anyone?

It looks like Jens Maurer's fix in libstdcpp.hpp doesn't do what he thought
it did: the idea is that BOOST_HAS_LONG_LONG refers to the compiler only.
After all there are some parts of Boost (like type_traits) that can make use
of it, and do the right thing without any library support.

We also have BOOST_NO_LONG_LONG_NUMERIC_LIMITS, but that may not refer to
the part of the library you want to use. What failures on Tru64 are you
seeing because of this?

John.


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