make (a < b < c) illegal?

Russell Lewis webmaster at villagersonline.com
Tue Feb 13 10:50:21 PST 2007


Russell Lewis wrote:
> Derek Parnell wrote:
>> On Wed, 07 Feb 2007 17:09:35 -0800, Andrei Alexandrescu (See Website For
> 
>>> What's the intended meaning of:
>>>
>>> a < b == c < d
>>
>> Well that *obvious*!
>>
>>  (((a < b) && (b == c)) < d)  <G>
>>
>> Okay, okay, I see your point. But it would be useful (one day) to easily
>> code the idiom  (a op b) && (b op c),  no?
>> How about someone knocking up a mixin template for expressions of this
>> format? I haven't got a clue how it could be done as the
>> mixin/template/meta-programming syntax and semantics of D is still so
>> obtuse and confusing to me that I can only do the very simplest things 
>> and
>> then only after many false starts.
> 
> The chain that I'm concerned about is this:
>     a==b == c==d
> which (the spacing makes clear) is meant to be
>     (a==b) == (c==d)
> but which could me misread as
>     (a==b) && (b==c) && (c==d)
> and which is probably (I'm not sure) currently implemented by the 
> compiler as:
>     ((a==b) ==c) ==d
> 
> IMHO, C should have allowed comparison chaining from the start, but 
> since it didn't, I don't think that it would be a good idea to start 
> allowing it.  There will always be the newbies from C who will misread 
> it.  (sigh)

Addendum: I would be ok with making the less than/greater than operators 
be chainable (since those operators are nonsense when used with boolean 
values), but I would ask that no expression be able to mix less-than and 
greater-than.  It would be ok to mix < with <=, but not < with >.



More information about the Digitalmars-d mailing list