int foo(ref int y) { y = 5; return y; } void main() { int x = 1; int y = 2; switch (x = foo(y)) { case y: writeln("x == y"); default: } assert(x == 5); assert(y == 5); }
According to the docs: The case expressions must all evaluate to a constant value or array, or a runtime initialized const or immutable variable of integral type. In fact if you try to add a constant, only then will you get an error: switch (x) { case y + 1: } Error: case must be a string or an integral constant, not y + 1 It will also error out if you try to use a field of a struct. Which leads me to believe the first case should not be allowed to compile. Thoughts?