This has been asked so many times, is this info not on the website? We should have an article on the site explaining this in depth. OT: Sorry for top-quoting and over-quoting.<br><br>On Friday, May 30, 2014, monarch_dodra via Digitalmars-d-learn <<a href="mailto:digitalmars-d-learn@puremagic.com">digitalmars-d-learn@puremagic.com</a>> wrote:<br>
> On Friday, 30 May 2014 at 15:30:15 UTC, Russel Winder via Digitalmars-d-learn wrote:<br>>><br>>> I think I have no idea what D enums are about.<br>>><br>>> Bearophile's example of some code in an email on another thread uses:<br>
>><br>>>         enum double p0 = 0.0045;<br>>><br>>> Now I would have written:<br>>><br>>>         immutable double p0 = 0.0045;<br>>><br>>> or at the very worst:<br>>><br>
>>         const double p0 = 0.0045;<br>>><br>>> For me, enum means create an enumerated type. Thus "enum double" to<br>>> define a single value is just a contradiction.<br>>><br>>> Enlightenment required…<br>
><br>> The keyword "enum" stems from the enum hack in C++, where you use:<br>> enum {foo = 100}; //Or similar<br>><br>> As a way to declare a manifest constant known at compile time.<br>><br>> D simply "hijacked" the "enum" keyword to mean "manifest constant that is known at compile time".<br>
><br>> Compared to an immutable instance:<br>> * The immutable instance creates an actual reference-able object in your binary. The enum will not exist outside of the compilation (think of it as a higher order macro)<br>
> * immutable represents a value, which *may* be initialized at runtime. In any case, more often than not (I have observed), the compiler will refuse to use the immutable's value as compile-time known, and it won't be useable as a template parameter, or static if constraint.<br>
>