[Issue 7835] switch case fallthrough error despite a break inside static foreach

d-bugmail at puremagic.com d-bugmail at puremagic.com
Fri Apr 6 11:36:23 PDT 2012


http://d.puremagic.com/issues/show_bug.cgi?id=7835



--- Comment #6 from Dmitry Olshansky <dmitry.olsh at gmail.com> 2012-04-06 11:37:01 PDT ---
(In reply to comment #5)
> This compiles with no warnings and it seems to work correctly, but I don't
> fully understand it:
> 
> 
> import core.stdc.stdio: printf;
> template TypeTuple(TList...) {
>     alias TList TypeTuple;
> }
> void main() {
>     char c = 'b';
>     MySwitch: switch (c) {
>         case 'a': printf("1 a\n"); break;
>         foreach (o; TypeTuple!('b', 'c')) {
>             case o: printf("2 %c\n", c); break;
>         }
>         break;
>         default: printf("default");
>     }
> }
> 
> 
> Is it correct? if the break inside here is meant to be the foreach break:

Yes.

> { case o: printf("2 %c\n", c); break; }
No it's {case 0: printf("2 %c\n", c); }

the break did his job already, it can't work twice.


> 
> Then why a single break is enough after:
> 
>         foreach (o; TypeTuple!('b', 'c')) {
>             case o: printf("2 %c\n", c); break;
>         }

Then the code below gives you one break after that statement.
>         break;
> 
> despite the foreach synthesizes more than one switch case?

foreach synthesizes exactly one statement here.

-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list