On Monday, 2 December 2013 at 07:27:25 UTC, Ali Çehreli wrote:
On 12/01/2013 09:57 PM, CJS wrote:> I was reading the enum page of Ali Çehreli's (excellent) D book > (http://ddili.org/ders/d.en/enum.html), and I'm confused by an enum > value (not enum type), such as > enum secondsPerDay = 60 * 60 * 24; > In that situation I would have used an immutable variable. Is there any > reason to prefer enum vs. immutable when defining constants?After realizing the other day that even 'static const' can be used for template instantiations, I am not sure myself anymore. :)Simple rules are great. I wanted to accept the following guidelines, none of which are clear cut:1) Prefer enum first because enum values can be used for template instantiations.
You can instatiate templates not only with enums. Main pro for enums is that they are CT values.
3) Prefer const last as it erases immutable attribute if present. (We can't know just by looking at a reference to const whether the original value has been immutable or mutable.)
It is interesting to know where such advices come from. Const in D is useless except as as parameter qualifier, method qualifier, tool to alias const data and non-const data and as qualifier of some field - member of aggregate.
Writing code like const int i = SOME_VALUE;is loosing advantages of immutable or enum while gaining nothing in return.
It is C++ism like follwoing code:
struct S { public: this(type){} ... }
or
static Type t; // in module scope
