Yet another slap on the hand by implicit bool to int conversions

Steven Schveighoffer schveiguy at yahoo.com
Mon Jun 20 06:31:06 PDT 2011


On Mon, 20 Jun 2011 09:17:56 -0400, Daniel Gibson <metalcaedes at gmail.com>  
wrote:

> Am 20.06.2011 14:47, schrieb Steven Schveighoffer:
>> On Sun, 19 Jun 2011 19:42:22 -0400, bearophile
>> <bearophileHUGS at lycos.com> wrote:
>>
>>> Timon Gehr:
>>>
>>>> Maybe DMD could warn on nonsense of the form x != x.
>>>
>>> Right. This thread is very good food for this enhancement request of
>>> mine:
>>> http://d.puremagic.com/issues/show_bug.cgi?id=5540
>>>
>>> Vote for this enhancement :-)
>>
>> I don't think this is a good idea.  Generic code could result in an
>> error where there shouldn't be.  For example:
>>
>> int foo(T)()
>> {
>>    if(T.sizeof == char.sizeof)
>>      ...
>> }
>>
>> Would this fail to compile where T == char?  What about if T == ubyte?
>>
>> Generic programming sometimes results in silly code that is perfectly
>> acceptable as generic code, and we need to take this into account before
>> making decisions assuming a person is writing the code.
>>
>> -Steve
>
> It probably makes more sense to use static if in that case - and static
> if could be an exception for these rules.

static if has different semantics than if (it doesn't create a scope), so  
maybe I want to use if.  But even so, static if is just as likely to  
contain these bugs as a normal if.  Both use an expression to determine  
whether the if should run or not, and there are quite a few constructs  
that can be used in a static if expression.

-Steve


More information about the Digitalmars-d mailing list