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

Reply via email to