It's a fall trough but it is not the reason why it does works. It does because (as Daniel already mentioned) a case is a valid statement, therefore a case following other case is a totally valid statement.

for example:

case 1:
case 2:
  return true;

There are three statements. One which must be followed by another (case keyword) and another by an expression (return keyword).


I agree that this is a valid D language construction. But documentation says that statement "case 1:" must be followed by any statement except other "case" or "default".
Let's open doc http://dlang.org/statement#CaseStatement
You see that "case ArgumentList :" is followed by "ScopeStatementList" (http://dlang.org/statement#ScopeStatementList) which is a list of any statements except CaseStatement or CaseRangeStatement or DefaultStatement. This rule conflicts with actual D language compiler.

Reply via email to