Thread overview
assignment in ? operator
Sep 06, 2004
Ilya Zaitseff
Sep 06, 2004
Stewart Gordon
Sep 07, 2004
Ilya Zaitseff
September 06, 2004
[bug.d]

void main()
{
  int a, b, c;
  (a < 0) ? b = 1 : c = 2;
}

Compiler [dmd 0.101] outputs:

bug.d(4): b = 1 is not an lvalue
bug.d(4): #b = 1 is not an lvalue
bug.d(4): #c is not an lvalue
September 06, 2004
Ilya Zaitseff wrote:

> [bug.d]
> 
> void main()
> {
>   int a, b, c;
>   (a < 0) ? b = 1 : c = 2;
> }
> 
> Compiler [dmd 0.101] outputs:
> 
> bug.d(4): b = 1 is not an lvalue
> bug.d(4): #b = 1 is not an lvalue
> bug.d(4): #c is not an lvalue

http://www.digitalmars.com/d/expression.html

	AssignExpression:
		ConditionalExpression
		ConditionalExpression = AssignExpression
		ConditionalExpression += AssignExpression
		ConditionalExpression -= AssignExpression
		ConditionalExpression *= AssignExpression
		ConditionalExpression /= AssignExpression
		ConditionalExpression %= AssignExpression
		ConditionalExpression &= AssignExpression
		ConditionalExpression |= AssignExpression
		ConditionalExpression ^= AssignExpression
		ConditionalExpression ~= AssignExpression
		ConditionalExpression <<= AssignExpression
		ConditionalExpression >>= AssignExpression
		ConditionalExpression >>>= AssignExpression

	ConditionalExpression:
		OrOrExpression
		OrOrExpression ? Expression : ConditionalExpression

So your code means

    ((a < 0) ? b = 1 : c) = 2;

You need to tell it otherwise.

Stewart.

-- 
My e-mail is valid but not my primary mailbox.  Please keep replies on the 'group where everyone may benefit.
September 07, 2004
Stewart Gordon wrote:

> Ilya Zaitseff wrote:
>
>> [bug.d]
>>  void main()
>> {
>>   int a, b, c;
>>   (a < 0) ? b = 1 : c = 2;
>> }
>>  Compiler [dmd 0.101] outputs:
>>  bug.d(4): b = 1 is not an lvalue
>> bug.d(4): #b = 1 is not an lvalue
>> bug.d(4): #c is not an lvalue
>
> http://www.digitalmars.com/d/expression.html
>
> 	AssignExpression:
> 		ConditionalExpression
> 		ConditionalExpression = AssignExpression
> 		ConditionalExpression += AssignExpression
> 		ConditionalExpression -= AssignExpression
> 		ConditionalExpression *= AssignExpression
> 		ConditionalExpression /= AssignExpression
> 		ConditionalExpression %= AssignExpression
> 		ConditionalExpression &= AssignExpression
> 		ConditionalExpression |= AssignExpression
> 		ConditionalExpression ^= AssignExpression
> 		ConditionalExpression ~= AssignExpression
> 		ConditionalExpression <<= AssignExpression
> 		ConditionalExpression >>= AssignExpression
> 		ConditionalExpression >>>= AssignExpression
>
> 	ConditionalExpression:
> 		OrOrExpression
> 		OrOrExpression ? Expression : ConditionalExpression
>
> So your code means
>
>      ((a < 0) ? b = 1 : c) = 2;
>
> You need to tell it otherwise.
>
> Stewart.
>

You right. Thanks!