Boost logo

Boost :

From: John Max Skaller (skaller_at_[hidden])
Date: 2001-06-22 18:26:33

Jens Maurer wrote:
> John Max Skaller wrote:
> >
> > 0. My system is linux/gcc 2.95.3.pentium:
> >
> > g++ -Wno-long-long -pedantic -ansi -shared -Iboost_1_22_0 ...
> What is your versioh of glibc?
> (find out with "ldd --version")

ldd (GNU libc) 2.1.2
> > 6. /usr/include/stdint.h exists, and it defines (u)int64_t
> Note that the definition of (u)int64_t is not (primarily) a
> feature of your compiler, but of your standard library. On
> Linux, these are separate things.


> There is also a definition of (u)intXX_t in /usr/include/sys/types.h,
> at least here on glibc 2.2.3. Unfortunately, for (u)int64_t, these
> definitions are slightly different. In particular,
> stdint.h says (note the absence of any dependency on __GNUC__):
> # if __WORDSIZE == 64
> typedef long int int64_t;
> # else
> __extension__
> typedef long long int int64_t;
> # endif
> But (on one #ifdef branch) sys/types.h says:
> # ifdef __GNUC__
> __extension__ typedef long long int int64_t;
> # endif

        Yes, I've got that.
> That means when using non-gcc compilers with these headers,
> it depends on the order of #include's (sys/types.h first or
> stdint.h first) whether int64_t is available or not. I
> therefore decided not to depend on stdint.h.

        Fair enough.
> The preprocessor conditions look for one of the <limits.h>
> macros for "long long". Note that gcc defines these
> only when special #defines are given. Try -D_GNU_SOURCE.

Now it doesn't recognize long long constants :->

[root_at_pelican] ~/links/flx>g++ -Wno-long-long -D_GNU_SOURCE -ansi
-pedantic -Iboost_1_22_0 tmp.cpp
In file included from tmp.cpp:1:
boost_1_22_0/boost/cstdint.hpp:149: too many `l's in integer constant
boost_1_22_0/boost/cstdint.hpp:160: #error defaults not correct; you
must hand modify boost/cstdint.hpp

The test file tmp.cpp is:
#include <boost/cstdint.hpp>
//#include <stdint.h>
int main()
  boost::int64_t i = 1;
  boost::uint64_t u = 1;
  return 0;

What I might do is this:

#ifdef BOOST_NO_INT64_T
namespace boost {
  typedef long long int64_t;
  typedef unsigned long long uint64_t;

The problem is that it won't work if long long
isn't defined. But it will fix the problem temporarily
for the demo, which only works on Linux anyhow.

John (Max) Skaller, mailto:skaller_at_[hidden]
10/1 Toxteth Rd Glebe NSW 2037 Australia voice: 61-2-9660-0850
checkout Vyper
download Interscript

Boost list run by bdawes at, gregod at, cpdaniel at, john at