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.
On Friday, May 30, 2014, monarch_dodra via Digitalmars-d-learn <digitalmars-d-learn@puremagic.com> wrote:
> On Friday, 30 May 2014 at 15:30:15 UTC, Russel Winder via Digitalmars-d-learn wrote:
>>
>> I think I have no idea what D enums are about.
>>
>> Bearophile's example of some code in an email on another thread uses:
>>
>> enum double p0 = 0.0045;
>>
>> Now I would have written:
>>
>> immutable double p0 = 0.0045;
>>
>> or at the very worst:
>>
>> const double p0 = 0.0045;
>>
>> For me, enum means create an enumerated type. Thus "enum double" to
>> define a single value is just a contradiction.
>>
>> Enlightenment required…
>
> The keyword "enum" stems from the enum hack in C++, where you use:
> enum {foo = 100}; //Or similar
>
> As a way to declare a manifest constant known at compile time.
>
> D simply "hijacked" the "enum" keyword to mean "manifest constant that is known at compile time".
>
> Compared to an immutable instance:
> * 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)
> * 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.
>