Firest, complete code to save others' time:

import std.stdio;
import std.typetuple;

void main()
{
    immutable key = 3;
    switch (key)
    {
        foreach (c; TypeTuple!(1, 2, 3, 4, 5))
        {
            case c: "Found %s!".writefln(c);
                    break;
        }
        break; // Default always gets executed without this break.
        default:
            "Not found %s :(".writefln(key);
            break;
    }
}

On 04/07/2014 03:30 PM, Matej Nanut wrote:

> I don't understand why so many break statements are needed in this construct:
>
>      immutable key = 3;
>      switch (key)
>      {
>          foreach (c; TypeTuple!(1, 2, 3, 4, 5))

Ok, that's a compile-time foreach.

>          {
>              case c: "Found %s!".writefln(c);
>                      break;

That's interesting. Since a compile-time foreach is expanded at compile time, what happens to a break statement in it? Do we break out of the foreach statement or do we insert a break statement?

Apparently, the break inside foreach belongs to the switch-case.

>          }
>          break; // Default always gets executed without this break.
>          default:

I think needing that break is a bug. Meanwhile, moving the default block before the foreach seems to be a workaround.

>              "Not found %s :(".writefln(key);
>              break;
>      }
>
> One after each case and another one after the foreach.
>
> Thanks,
> Matej
>

Ali

Reply via email to