Signed-unsigned comparisons in Phobos

Timon Gehr timon.gehr at gmx.ch
Fri Aug 12 16:06:22 PDT 2011


On 08/12/2011 11:06 PM, Don wrote:
> Timon Gehr wrote:
>> On 08/12/2011 09:32 PM, bearophile wrote:
>>> Timon Gehr:
>>>
>>>> foreach_reverse(i;0..array.length) writeln(array[i]),i--;
>>>
>>> I'd like to statically forbid some more usages of the comma operator
>>> in D :-)
>>>
>>> Some of them are already forbidden compared to C. This is valid C code:
>>>
>>> int main() {
>>> int array[5];
>>> int i = 1;
>>> int j = 2;
>>> array[i, j] = 5;
>>> return 0;
>>> }
>>>
>>> While in D it's forbidden, it catches a possible wrong usage:
>>> Line 5: Error: only one index allowed to index int[5u]
>>>
>>> Bye,
>>> bearophile
>>
>> That is because it is not a comma operator. It is an argument list. ;)
>> array[(i, j)] = 5;
>> works fine.
>
> No, it was specifically disallowed.
>
> Version D 2.037 Dec 3, 2009
> New/Changed Features
> No more comma operators allowed between [ ].

Interesting. So first , inside [ ] was specifically special cased to be 
a comma operator when indexing into an array (you can overload indexing 
to take more than one argument) and now those are disallowed? Quite 
messy. Imho that is just an implementation detail and does not 
invalidate my statement. (in case you were actually saying that the code 
should not compile, it does.)



More information about the Digitalmars-d mailing list