Thread overview | ||||||||
---|---|---|---|---|---|---|---|---|
|
April 23, 2015 switch case expressions | ||||
---|---|---|---|---|
| ||||
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. |
April 23, 2015 Re: switch case expressions | ||||
---|---|---|---|---|
| ||||
Posted in reply to Martin Krejcirik | 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
|
April 23, 2015 Re: switch case expressions | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 4/23/15 4:25 PM, bearophile wrote:
> 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.
Source?
IMO, the OP code does not warrant the errors cited.
-Steve
|
April 23, 2015 Re: switch case expressions | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Thursday, April 23, 2015 16:29:03 Steven Schveighoffer via Digitalmars-d wrote: > On 4/23/15 4:25 PM, bearophile wrote: > > 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. > > Source? > > IMO, the OP code does not warrant the errors cited. 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 Davis |
April 23, 2015 Re: switch case expressions | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | 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: >> On 4/23/15 4:25 PM, bearophile wrote: >>> 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. >> >> Source? >> >> IMO, the OP code does not warrant the errors cited. > > 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 Davis > 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. -Steve |
April 23, 2015 Re: switch case expressions | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | > 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. |
Copyright © 1999-2021 by the D Language Foundation