Boost logo

Boost :

From: Aleksey Gurtovoy (alexy_at_[hidden])
Date: 2000-01-31 04:17:07


I've came across a small problem - the following lines in the latest
version of 'type_traits.hpp' produce

"struct/union/enum/class tag 'is_extension_unsigned_integral' redifined"

error message under Metrowerks CodeWarrior 5.0:

// type_traits.hpp, lines 236-247:

#ifdef ULLONG_MAX
template <> struct is_extension_unsigned_integral<unsigned long long>
{ static const bool value = true; };
template <> struct is_extension_signed_integral<long long>
{ static const bool value = true; };
#endif
#if defined(__BORLANDC__) || defined(_MSC_VER)
template <> struct is_extension_unsigned_integral<unsigned __int64>
{ static const bool value = true; };
template <> struct is_extension_signed_integral<__int64>
{ static const bool value = true; };
#endif

As far as I understand, the reason is very simple - both
'ULLONG_MAX' and '_MSC_VER' macros are defined and '__int64'
is a synonym (probably just a typedef) for 'long long', so we indeed
have a redefinition here.

I suggest to change the second '#ifdef' on this one

#if defined(__BORLANDC__) ||
    ( defined(_MSC_VER) && !defined(__MWERKS__) )

-Alexy


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