On Thursday, 21 November 2013 at 17:19:18 UTC, inout wrote:
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

forgot to add:

void foo(OtherIntention rth) { ... }

Which of the two is being called by main?

Reply via email to