On 4/29/15 5:25 AM, "Marc =?UTF-8?B?U2Now7x0eiI=?= <schue...@gmx.net>" wrote:
On Wednesday, 29 April 2015 at 06:37:44 UTC, ketmar wrote:
subj. the code:

  void main () {
    import std.stdio;
    char ch = '!';
    switch (ch) {
      int n = 42;
      case '!': writeln(n, ": wow!"); break;
      default:
    }
  }


i think that such abomination should:
1. be forbidden, or
2. trigger a warning, or
3. execute initializer anyway.

currently the code is allowed, no warnings triggered, yet `n` is
uninitialized. and having uninitialized variable without "=void" "should
not be".

Agreed, this should be an error. Variables declared in one case block
aren't even visible in other case blocks, this was probably an oversight.

I thought they were? A switch scope is just like a normal scope, but with a bunch of labels.

They should be visible in all *trailing* case blocks, since the rule is that your code that uses it must come after the declaration.

I agree the above should not be allowed. It's clear the compiler can detect a situation where n is used but not initialized.

-Steve

Reply via email to