On Saturday, 29 June 2013 at 20:45:12 UTC, Anthony Goins wrote:
Is this known?
I've heard there are many problems with associative arrays.

dmd 2.063

---
module scopefailtest;

int[char] AAarray;

void main(string[] args)
{
     AAarray = ['a':1, 'b':2, 'c':3];
     foreach(aa; AAarray)
     {
          scope(failure)continue;
          aa = 32;
     }
}
---

dmd output
Error: cannot implicitly convert expression (0) of type int to void


Works without scope(failure)
Works with non Associative Array

No helpful description.
No file or line number.
Very hard to find.

Seems like there are several levels of "wrong" actually: What do you expect "scope(failure)continue" to do exactly?

It compiles, but it doesn't make much sense?

When I run this code:
--------
void main(string[] args)
{
     foreach(aa; 0 .. 3)
     {
          scope(failure){writeln("error");continue;}
          writeln(aa);
          throw new Exception("");
     }
}
--------

I get:
--------
0
error
1
error
2
error
--------

Which is wrong, since a scope(failure) is not supposed to "catch" the exception. In this case, the "continue" short-circuits the compiler generated "rethrow".

DMD is on to something, because if you replace failure with "exit" or "success", then it complains with: "Error: continue is not inside a loop".

Reply via email to