$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