On 04/29/2012 08:35 AM, Nick Sabalausky wrote:
"Timon Gehr"<[email protected]> wrote in message
news:[email protected]...
On 04/28/2012 11:04 PM, Dmitry Olshansky wrote:
But how about:
alias thing = runSomeCtfe();
That would work in certain cases, where the initializer is not a single
symbol. But then, I kinda like the way 'enum' is generalized in D:
enum Foo{
member1,
member2,
member3,
}
=> (allow non-integral enumerations)
enum Foo{
member1 = "1",
member2 = "2",
member3 = "3",
}
Those are good. They are essentially enumerations.
=> (anonymous enums)
enum{
member1 = "1",
member2 = "2",
member3 = "3",
}
I don't think "anonymous enum" makes any sense at all. It's *not* an
enumeration by any stretch of the term,
enum{
member1,
member2,
member3,
}
static assert(member1+1==member2 && member2+1==member3);
it's just a series of manifest
constants. The fact that they're grouped doesn't even have any semantic
consequence, as far as I'm aware.
The only differences are that they don't occupy their own namespace and
they don't define their own type. But non-anonymous enums are _just a
bunch of manifest constants_ as well! Therefore there are ways in which
the generalisation makes sense.
=> (a single member is okay)
enum{
member1 = "1",
}
=> (syntactic sugar)
enum member1 = "1";
Just simpler examples of the above, which isn't any form of enumeration at
all.
'enum' declares manifest constants whether or not it is anonymous. Afaik
go uses 'const' for enumerations and manifest constants. 'const' means a
different thing in D. (arguably, 'readonly' would be a better fit) I
don't think that the exact keywords matter a huge deal here.