$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
Subject: Re: [boost] [new Warnings policy] MS C4180 on the	Maintenance Guidelines
From: Christopher Jefferson (chris_at_[hidden])
Date: 2009-11-17 11:25:23
On 17 Nov 2009, at 16:22, Paul A. Bristow wrote:
>> -----Original Message-----
>> From: boost-bounces_at_[hidden] [mailto:boost-bounces_at_[hidden]] On
> Behalf Of
>> Mateusz Loskot
>> Sent: Tuesday, November 17, 2009 3:36 PM
>> To: boost_at_[hidden]
>> Subject: Re: [boost] [new Warnings policy] MS C4180 on the Maintenance
> Guidelines
>> 
>> Gottlob Frege wrote:
>>> On Mon, Nov 16, 2009 at 4:08 PM, Patrick Horgan <phorgan1_at_[hidden]> wrote:
>>>>  C4800 Might suggest that they use a bool valued expression in the first
>>>>  place, i.e. instead of foo, foo!=0, or do a static cast to bool.  This is
> at
>>>>  times indicative of real bugs, when people turn out to not be doing what
>>>>  they thought they were doing.  Apparently this is one of my favorite bugs
>>>>  (by favorite I don't mean that I like it either!)
>>> 
>>> C4800: int' : forcing value to bool 'true' or 'false'
>>> 
>>> I'm a big fan of using !! to convert to bool:
>>> 
>>> bool has_item()
>>> {
>>>    Foo * foo = find_item();
>>> 
>>>    return !!foo; // convert ptr to bool
>>> }
>>> 
>>> Is that too subtle for others?  It wouldn't be too subtle if it became
>>> a common idiom. :-)
>> 
>> It looks like a quite recommended idiom (double-bang trick)
>> 
>> http://www.artima.com/cppsource/safebool.html
> 
> Looks OK to me but anyone 'deprecating' this before I add it to the guidelines?
> 
> Are we sure that all compilers can evaluate this as compile time - otherwise
> while debugging users might find it a pest?
While this is a a workaround that disables the warning, I personally find it almost unreadable, and wouldn't want to encourage it's usage. In my mind when I see a ! I think "not", and have to always apply extra brain power to realise there are 2, and what it means.
Chris