|
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