On Thursday, 21 November 2013 at 07:22:39 UTC, Steve Teale wrote:
import std.stdio;

enum Intention
{
   EVIL,
   NEUTRAL,
   GOOD,
   SAINTLY
}

void foo(Intention rth)
{
   if (rth == EVIL)
      writeln("Road to hell");
}


void main()
{
   foo(EVIL);
}


Why does the compiler complain in both places about EVIL. Can it not work out which EVIL I mean? There's only one choice.

I don't think it would be a good idea to let a compiler decide which symbol I mean :). So you must use Intention.EVIL instead of just EVIL. Or you can do some trick like this:

enum Intention : int {_}
enum : Intention
{
    EVIL = cast(Intention)0,
    NEUTRAL = cast(Intention)1,
    GOOD = cast(Intention)2,
    SAINTLY = cast(Intention)3,
}

void foo(Intention rth)
{
    if (rth == EVIL)
        writeln("Road to hell");
}

void main()
{
    foo(EVIL);
}

or use aliases:

enum Intention
{
    EVIL,
    NEUTRAL,
    GOOD,
    SAINTLY,
}

alias EVIL = Intention.EVIL;
alias NEUTRAL = Intention.NEUTRAL;
alias GOOD = Intention.GOOD;
alias SAINTLY = Intention.SAINTLY;

void foo(Intention rth)
{
    if (rth == EVIL)
        writeln("Road to hell");
}

void main()
{
    foo(EVIL);
}

Reply via email to