On Thursday, 2 November 2017 at 20:37:11 UTC, user1234 wrote:
switch (i)
default: break;
}
you have 3 non-ambiguous and contiguous statements without a
block: a switch, a default case (the "free-floating" one) and a
break. Now why is this allowed is another story ;)
I've found a use for it - breakable blocks. (It's a bit neater
than putting the label inside the block):
switch (1) default:
{
auto x = foo();
if (x == bar) break;
auto y = x.baz();
if (!y) break;
y.writeln;
}
This avoids indentation from nested if statements instead of
breaks. Although this is not ideal syntax, it's better than
abusing a loop construct for something that's not a loop. Using a
goto makes the code read less naturally as the label is after the
block.