On Tue, 15 Nov 2011 10:47:22 -0500, Johannes Totz <johan...@jo-t.de> wrote:

On 15/11/2011 15:43, Johannes Totz wrote:
On 14/11/2011 22:32, Timon Gehr 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 constan

t 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?


I don't know. It works for me.

import std.stdio;

enum X : string{
a = "a",
b = "b",
}


int main(string[] argv) {
writeln(X.a);
return 0;
}

compiles, runs and prints "a" as expected.

Are you using the latest version of the compiler? (DMD v2.056)

I had 2.055 and just upgraded.
But this seems to be some issue with VisualD. Compiling on the command
line (with 2.056) works fine as expected.

Ah, when I compile on the command line with:

dmd -g -debug main.d

main.d(6): Error: enum main.X base type must be of integral type, not char[] main.d(8): Error: cannot implicitly convert expression ("a") of type char[1u] to int main.d(9): Error: cannot implicitly convert expression ("b") of type char[1u] to int

dmd must map to a D1 version, where string literals were char[N], not immutable(char)[]. In D1, you could not have enums that were strings.

-Steve

Reply via email to