On 01/18/2017 05:22 PM, Yuxuan Shui wrote:
Somehow I can't use ubyte variables behind 'case', but ulong works fine.
Why is that?
void main() {
alias TestType = ulong; // won't compile if = ubyte
import std.stdio;
TestType a,b,c;
readf("%s %s %s ", &a, &b, &c);
switch(c){
case a: writeln("a");break;
case b: writeln("b");break;
default: assert(false);
}
}
case expressions must be constants:
"The case expressions must all evaluate to a constant value or
array, or a runtime initialized const or immutable variable of
integral type."
https://dlang.org/spec/statement.html#SwitchStatement
The fact that it compiles for ulong looks like a bug to me. It compiles
probably because switch is most likely implemented in terms of a chained
if-else-if statements by the compiler and it just works because there is
no explicit check whether they are constant or not.
Ali