make (a < b < c) illegal?

Andrei Alexandrescu (See Website For Email) SeeWebsiteForEmail at erdani.org
Wed Feb 7 17:09:35 PST 2007


Derek Parnell wrote:
> On Wed, 07 Feb 2007 16:55:15 -0800, Walter Bright wrote:
> 
>> Right now, in D (as well as C and C++), when you see the expression:
>>
>> 	if (a < b < c)
>>
>> what is your first thought? Mine is that it was written by a newbie who 
>> didn't realize that (a < b) returns true or false, and that it does NOT 
>> mean ((a < b) && (b < c)). The odds approach certainty that this is a 
>> logic error in the code, and even if it was intentional, it raises such 
>> a red flag that it shouldn't be used anyway.
>>
>> Andrei has proposed (and I agreed) that this should be done away with in 
>> the language, i.e. comparison operators should no longer be associative. 
>>   It's a simple change to the grammar. If one really did want to write 
>> such code, it could be done with parentheses:
>>
>> 	if ((a < b) < c)
>>
>> to get the original behavior. At least, that looks intentional.
>>
>> I don't think this will break existing code that isn't already broken.
> 
> First thought: Yes, your proposed change makes sense.
> 
> Second thought: Why not make it do what the coder is wanting it to do?
>    Namely, make the idiom:
> 
>      expression1 relopA expression2 relopB expression3
> 
>    translate as
> 
>      ( auto temp = expression2,
>       (expression1 relopA temp) && (temp relopB expression3) )

What's the intended meaning of:

a < b == c < d

?


Andrei



More information about the Digitalmars-d mailing list