Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-02-18 18:52:29

"Jeff Garland" <jeff_at_[hidden]> writes:

>> Many of the regression tests for the date time library are failing
>> currently because the library relies on std::abs<long long> being
>> available. AKAIK, the C++ standard doesn't require this so the library
>> shouldn't make use of it.
>> Maybe datetime should specify it's own version of abs like this:
>> #include <cstdlib>
>> #include <stdlib.h>
>> template <typename T> T abs(T i) { return std::abs(i); }
>> template <> long long abs(long long i) {return ::llabs(i); }
> Take a look at bosot/date_time/compiler_config.hpp which
> does something similar. All we need to do to fix these regressions
> is add the compiler to the list of those that don't have std::abs
> at line 34. Turns out that some compilers that support long long
> do define a version of abs for long long. (I'm sure you also
> know that some compilers don't call it the type long long
> either which is why we have boost::int64_t).
> Just as an aside, at some point this logic should likely
> move out of date_time and into the general config somewhere
> so that others can access std::abs on these types if they
> need.

AFAICT the logic is backwards: you should assume there's no std::abs
which works on long long and use your own function by default, only
using std::abs if the compiler is *known* to support that
extension... if it's even worth the trouble (it'll be less code to
just do the whole thing yourself).

Dave Abrahams
Boost Consulting

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