"Lennart Blanco" <[email protected]> wrote in message news:[email protected]... > Hi > > The page for enums specification > http://www.digitalmars.com/d/2.0/enum.htmldefines enum body syntax as > follows: > > EnumBody: > ; > { EnumMembers } > > Should it not be > > EnumBody: > EnumMember ; > { EnumMembers } > > or perhaps > > EnumBody: > EnumMembers ; > { EnumMembers } > > Otherwise, I can't quite grasp how following enums definitions are legal: > > enum X = 4; > > enum > mega = 1024 * 1024, > pi = 3.14, > euler = 2.72, > greet = "Hello"; > > (Both of the above enums are accepted by dmd v2.050). >
It's a poorly-named hack to allow people to create manifest constants. Ie, they're like immutable values, but they don't actually take up any space in memory. In other words, it works just like C's "#define SOME_VALUE 5": the value just gets substituted into the code wherever the name is found. But keep in mind that means it's not good to use that enum trick for arrays and AAs, because then a whole new array or AA will get allocated everywhere the enum is actually used.
