Boost logo

Boost Users :

Subject: Re: [Boost-users] Boost.Unordered throws 64-bit portability warnings
From: Dominique Devienne (ddevienne_at_[hidden])
Date: 2009-05-21 16:06:13


On Thu, May 21, 2009 at 2:36 PM, Daniel James <daniel_james_at_[hidden]> wrote:
> 2009/5/21 Dominique Devienne <ddevienne_at_[hidden]>:
>>
>> FWIW, I'm getting these as well when using
>> boost::hash_combine(hash_value(this->member_)); to implement hashes
>> for my classes. We also use VS2005 with the compiler switch that
>> raises these warnings. My work around below is not pretty... --DD
>>
>> #if ACME_SIZEOF_SIZE_T == 4
>>        // Avoid warning C4267: 'argument' :
>>        // conversion from 'size_t' to 'unsigned int', possible loss of data
>>        boost::hash_combine(
>>            seed, static_cast<unsigned int>(hash_value(member_))
>>        );
>> #else
>>        boost::hash_combine(seed, hash_value(member_));
>> #endif
>
> Doesn't 'boost::hash_combine(seed, member_)' work?

Never meant to imply it doesn't work, sorry. It's just to avoid the
warning, while not "breaking" the 64-bit compiles by doing the
narrowing-on-64-bit cast unconditionally. Could have snuffed the
VS2005 warning too. But it's an annoying warning.

> I'll have a look at the warning when I get the chance, but AFAICT
> they're wrong since when compiling for 64-bit a different overload or
> template resolution would be chosen.

No argument from me there ;-) --DD


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net