Boost logo

Boost :

Subject: Re: [boost] [xpressive] Significant compiler warning
From: Eric Niebler (eric_at_[hidden])
Date: 2009-11-25 21:06:57


Ian Emmons wrote:
> I have a program that uses Boost.Xpressive. When compiling this code on the Macintosh with the darwin-4.2.1 toolset, I get the following compiler warning:
>
> .../boost_1_41_0/boost/xpressive/traits/cpp_regex_traits.hpp:84:
> warning: left shift count >= width of type
>
> Here is the offending line of code:
>
> umaskex_t const highest_bit = 1
> << (sizeof(umaskex_t) * CHAR_BIT - 1);
>
> The problem (if my thinking cap is screwed on correctly) is that the 1 that is being shifted is of type int, and is not converted to the target type of umaskex_t until after the shift operation. I believe that this should be changed to the following to avoid highest_bit being set to zero:
>
> umaskex_t const highest_bit = static_cast<umaskex_t>(1)
> << (sizeof(umaskex_t) * CHAR_BIT - 1);

Seems right to me. I'll make the change. Thanks.

-- 
Eric Niebler
BoostPro Computing
http://www.boostpro.com

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