digitalmars.D - switch case expressions
- Martin Krejcirik (22/22) Apr 23 2015 void main(string[] args)
- bearophile (5/7) Apr 23 2015 Apparently it's a WONTFIX mess. The spec should be updated.
- Steven Schveighoffer (4/9) Apr 23 2015 Source?
- Jonathan M Davis via Digitalmars-d (7/17) Apr 23 2015 Well, there's this mess
- Steven Schveighoffer (7/26) Apr 23 2015 Found it by following some references:
- Martin Krejcirik (4/10) Apr 23 2015 Looks like this issue surfaces periodically. Somehow I've missed
void main(string[] args) { int a = 1; int b = to!int(args[1]); uint c = 2; switch (a) { case b: break; // OK case c: break; // Error: variable c cannot be read at compile time default: break; } } Switch spec says: The case expressions must all evaluate to a constant value or array, or a runtime initialized const or immutable variable of integral type. They must be implicitly convertible to the type of the switch Expression. So, should the case b compile or not ? Is the spec too restrictive here, or is it a bug ? I was initially working to fix the case c (to allow casts), but this should be clarified.
Apr 23 2015
Martin Krejcirik:So, should the case b compile or not ? Is the spec too restrictive here, or is it a bug ?Apparently it's a WONTFIX mess. The spec should be updated. Walter&Andrei refused to fix a design bug here. Bye, bearophile
Apr 23 2015
On 4/23/15 4:25 PM, bearophile wrote:Martin Krejcirik:Source? IMO, the OP code does not warrant the errors cited. -SteveSo, should the case b compile or not ? Is the spec too restrictive here, or is it a bug ?Apparently it's a WONTFIX mess. The spec should be updated. Walter&Andrei refused to fix a design bug here.
Apr 23 2015
On Thursday, April 23, 2015 16:29:03 Steven Schveighoffer via Digitalmars-d wrote:On 4/23/15 4:25 PM, bearophile wrote:Well, there's this mess https://issues.dlang.org/show_bug.cgi?id=6176 but I don't see anything in there from Walter or Andrei, so I'm not sure what Bearophile is referring to. Personally though, I wish that case statements only allowed compile-time constants... :| - Jonathan M DavisMartin Krejcirik:Source? IMO, the OP code does not warrant the errors cited.So, should the case b compile or not ? Is the spec too restrictive here, or is it a bug ?Apparently it's a WONTFIX mess. The spec should be updated. Walter&Andrei refused to fix a design bug here.
Apr 23 2015
On 4/23/15 5:04 PM, Jonathan M Davis via Digitalmars-d wrote:On Thursday, April 23, 2015 16:29:03 Steven Schveighoffer via Digitalmars-d wrote:Found it by following some references: https://github.com/D-Programming-Language/dmd/pull/2887 Ugh... at the VERY LEAST, the error message should be fixed, as "can't be read at compile time" is clearly not the issue. -SteveOn 4/23/15 4:25 PM, bearophile wrote:Well, there's this mess https://issues.dlang.org/show_bug.cgi?id=6176 but I don't see anything in there from Walter or Andrei, so I'm not sure what Bearophile is referring to. Personally though, I wish that case statements only allowed compile-time constants... :| - Jonathan M DavisMartin Krejcirik:Source? IMO, the OP code does not warrant the errors cited.So, should the case b compile or not ? Is the spec too restrictive here, or is it a bug ?Apparently it's a WONTFIX mess. The spec should be updated. Walter&Andrei refused to fix a design bug here.
Apr 23 2015
https://github.com/D-Programming-Language/dmd/pull/2887 Ugh... at the VERY LEAST, the error message should be fixed, as "can't be read at compile time" is clearly not the issue.Looks like this issue surfaces periodically. Somehow I've missed it so far. Anyway, either the spec is wrong or the implementation is wrong.at the VERY LEAST, the error message should be fixed, as "can't be read at compile time" is clearly not the issue.This is auto solved by allowing cast in case expression.
Apr 23 2015