
Simonson, Lucanus J wrote:
I use long long and long double in the configuration of my integer arithmetic traits. I'd like to guard those usages with boost macros to allow the code to compile on platforms that don't support long long and long double (replace with long and double respectively) but I can only find a BOOST_HAS_LONG_LONG macro (which is apparently not documented) and not a corresponding BOOST_HAS_LONG_DOUBLE. Is there some other macro I can use to detect BOOST_HAS_LONG_DOUBLE or a typedef I can use that is already set to long double if available and double otherwise?
long double is standard C++. long long is only the the new standard.
You might also consider using boost::int64_t from boost/cstdint.hpp guarded by BOOST_NO_INT64_T
msvc has 64 bit ints, but doesn't call them long long.
In Christ, Steven Watanabe
Yes, I realized that long double must be standard after grepping the boost codebase and seeing it used everywhere. If we searched the archive we'd probably find I asked this same question in the past. I might be a slow learner. My code with long long compiles in MSVC, does is compile to a 32 bit int? Specifying int64_t would make sense if my integer coordinate traits were in terms of int32_t, but they are in terms of int. Perhaps I should change that as well.
FWIW, Boost has boost::long_long_type and boost::ulong_long_type typedefs (only if BOOST_HAS_LONG_LONG is defined) representing the platform specific long long/__int64/etc. Regards Hartmut