Bug in ^^

Johan Engelen j at j.nl
Tue Sep 17 17:42:47 UTC 2019


Calm down Brett :-)
People are only trying to help here, and as far as I can tell 
they fully understood what you wrote.

On Tuesday, 17 September 2019 at 17:23:06 UTC, Brett wrote:
> 
> 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

That is not what was meant. Enums are not always ints. The type 
of the initializing expression determines the type of the enum.
Numbers are by default `int`, unless it must be another type.
10 --->  is an `int`
17 --->  is an `int`
100000000000000000 --> cannot be an `int`, so is a larger type

> and so 10^17 should wrap...

10^17 is equal to  "number ^^ number". What's the first number? 
10. So that's an `int`. What's the second number? 17, also an 
`int`.  `int ^^ int` results in another `int`. Thus the type of 
the expression "10^^17" is `int` --> the enum that is initialized 
by 10^^17 will also be an `int`. The wrapping that you see is not 
that the enum is wrapping. It is the wrapping of the calculation 
`int ^^ int`. That wrapped calculation result is then used as 
initializer for the enum. Again, the fact that 10^^17 is wrapping 
has nothing to do with enum.

-Johan



More information about the Digitalmars-d mailing list