Bug in ^^

Brett Brett at gmail.com
Tue Sep 17 17:23:06 UTC 2019


On Tuesday, 17 September 2019 at 17:05:33 UTC, bachmeier wrote:
> On Tuesday, 17 September 2019 at 16:50:29 UTC, Brett wrote:
>
>> Wrong:
>> import std.stdio;
>> enum x = 100000000000000000;
>> enum y = 10^^17;
>>
>> void main()
>> {
>>     ulong xx = x;
>>     ulong yy = y;
>>     writeln(x);
>>     writeln(y);
>>     writeln(xx);
>>     writeln(yy);
>> }
>>
>> 100000000000000000
>> 1569325056
>> 100000000000000000
>> 1569325056
>>
>> I gave code to prove that I was right, why is it so difficult 
>> for people to accept? All I see is people trying to justify 
>> the compilers current behavior rather than think for 
>> themselves and realize something wrong!
>>
>> This not a difficult issue.
>
> That output looks correct to me.

enum x = 100000000000000000;
enum y = 10^^17;

Why do you think 10^^17 and 100000000000000000

should be different?

First I'm told that enum's are ints and so 10^17 should wrap... 
yet 100000000000000000 is not wrapped(yet you say it looks 
correct)...

then I'm told I have to use L's to get it to not wrap, yet

100000000000000000

does not have L... and it doesn't wrap(so the L is implicit).

So which is it?

Do you not understand that something is going on that makes no 
sense and this creates problems? It doesn't make sense... even if 
you think it does.

Either the compiler needs to warn or there has to be a consistent 
behavior and there clearly is not consistent behavior... just 
because it makes sense to you it only means that you are choosing 
the behavior the compiler uses, but the compiler can be wrong and 
hence that means you would be wrong too.






More information about the Digitalmars-d mailing list