On Friday, October 14, 2011 20:47:12 Lennart Blanco wrote: > Hi > > When compiling following code with dmd (v2.051) > > enum nums { X = 'a', Y, Z } > > void main() { > nums q; > char w; > w = q; > } > > I get 'Error: cannot implicitly convert expression (q) of type nums to char' > for the 'w = q' assigment. > > Should'n the inferred base type for 'nums' be char, given that the first > 'nums' member is initilized with char literal 'a'? > > When the nums declaration is changed to: > > enum nums : char { X = 'a', Y, Z } > > the code compiles without errors. > > It seems that when enums base type is allways inferred to int. Am I missing > something or is it an DMD bug?
I believe that the answer is that there is effectively no inferrence when you give a list of enum values (rather than declaring a manifest constant), and it is always assumed to be int unless you declare it to be otherwise. I would point out however, that you wouldn't want it to be char anyway. You'd want it to be dchar. Since char uses a multi-byte encoding, you're just begging for bugs if you operate on individual chars (which is why I think that 'a' should be inferred to be dchar, but that's a separate issue). - Jonathan M Davis