DIP 1015--Deprecation of Implicit Conversion of Int. & Char. Literals to bool--Formal Assement
Walter Bright
newshound2 at digitalmars.com
Wed Nov 14 02:45:38 UTC 2018
On 11/13/2018 3:29 PM, Rubn wrote:
> enum : int { a = 127 }
To reiterate, this does not create an anonymous enum type. 'a' is typed as
'int'. Technically,
`a` is a manifest constant of type `int` with a value of `127`.
> enum A : int { a = 127 }
`a` is a manifest constant of type `A` with a value of `127`.
Remember that `A` is not an `int`. It is implicitly convertible to an integer
type that its value will fit in (Value Range Propagation). Other languages do
not have VRP, so expectations from how those languages behave do not apply to D.
VRP is a nice feature, it is why:
enum s = 100; // typed as int
enum t = 300; // also typed as int
ubyte u = s + 50; // works, no cast required,
// although the type is implicitly converted
ubyte v = t + 50; // fails
In your articles, it is crucial to understand the difference between a manifest
constant of type `int` and one of type `A`.
More information about the Digitalmars-d-announce
mailing list