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.

Because of the follwoing:

import foo.bar;

enum Intention
{
  EVIL,
  NEUTRAL,
  GOOD,
  SAINTLY
}

void foo(Intention rth)
{
...
}

void main()
{
  // imagine that this works
  foo(EVIL);
}

module foo.bar;

// someone else adds this later
enum OtherIntention
{
  EVIL,
  NEUTRAL,
  GOOD,
  SAINTLY
}

BOOM! Code no longer compiles.

As a rule, the code that compiles and works should preserve its behavior when new code is added, so this is prohibited.

Also please post to D.learn

Reply via email to