On 15/11/2011 20:37, Mike Wey wrote:
On 11/14/2011 11:25 PM, Johannes Totz wrote:
Hi!
I'm having trouble with named typed enums.
This works (unnamed):
enum : string
{
a = "a",
b = "b"
}
int main(string[] argv)
{
writeln(a);
return 0;
}
But this does not:
enum X : string
{
a = "a", // Error: Integer constant expression expected
// instead of "a"
b = "b" // Error: Integer constant expression expected
// instead of "b"
}
int main(string[] argv)
{
writeln(X.a);
return 0;
}
What did I miss?
Johannes
It's a bug: string enums don't work with -g compiler switch.
http://d.puremagic.com/issues/show_bug.cgi?id=5168
Ah thanks! I've added my case...
How would i go about using a custom class for the enum-type?
Various combinations of the snippet below lead to errors.
class EnumType
{
int x;
alias x this;
this(int i)
{
x = i;
}
void opCall(int i)
{
}
}
enum X : EnumType
{
a = EnumType(1),
b = 2
}
Errors range are always variations of
main.d(16): Error: function main.EnumType.opCall need 'this' to access
member opCall
main.d(23): called from here: opCall(1)
main.d(23): Error: cannot implicitly convert expression (opCall(1)) of
type void to main.EnumType
main.d(24): Error: cannot implicitly convert expression (2) of type int
to main.EnumType