that is bug?
Ali Çehreli
acehreli at yahoo.com
Sat Apr 7 18:52:56 UTC 2018
On 04/07/2018 10:53 AM, Ali wrote:
> On Saturday, 7 April 2018 at 15:26:56 UTC, Ali Çehreli wrote:
>> On 04/07/2018 02:07 AM, sdvcn wrote:
>>> string stt = "none";
>>> true?writeln("AA"):writeln("BB"); ///Out:AA
>>> true?stt="AA":stt="BB"; <<<<-----///Out:BB
>>> writeln(stt);
>>
>> It is a bug because the behavior does not match the spec:
>>
>> https://issues.dlang.org/show_bug.cgi?id=18743
>>
>> Ali
>
> Hi Ali C
>
> I think it also a bug because the ternary seem to be returning the
> second part
Maybe... but the following is not a good test for that because the
return value of the assignment operator would always be stt regardless
of which expression is evaluated.
>
> try
>
> string stt = "none";
> string b = "";
> true?writeln("AA"):writeln("BB"); ///Out:AA
> b = (true ? stt="AA":stt="BB"); ///Out:BB
> writeln(stt);
> writeln(b); ///Out:BB
I tried something else and noticed that it doesn't actually evaluate the
third expression because b is never changed:
import std.stdio;
void main() {
int a;
int b;
int * c = &(true ? a = 1 : b = 2);
writefln("a:%s %s", a, &a);
writefln("b:%s %s", b, &b);
writefln("c: %s", c);
}
Output:
a:2 7FFDBBF57DB0 <-- Got the value of the third expression (BAD)
b:0 7FFDBBF57DB4 <-- Not changed (good)
c: 7FFDBBF57DB0 <-- Address of a (good)
So, the expression correctly decides to affect and returns 'a' but uses
the wrong value to assign.
Ali
More information about the Digitalmars-d
mailing list