Thread overview | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
|
March 11, 2015 enum and static if | ||||
---|---|---|---|---|
| ||||
This code does not work: ---- enum Test { Foo, static if (__VERSION__ >= 2067) Bar, } Quatz } ---- Any chance that this could work? |
March 11, 2015 Re: enum and static if | ||||
---|---|---|---|---|
| ||||
Posted in reply to Namespace Attachments: | On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:
> This code does not work:
>
> ----
> enum Test {
> Foo,
> static if (__VERSION__ >= 2067)
> Bar,
> }
> Quatz
> }
> ----
>
> Any chance that this could work?
nope. `static if` is statement, so it works only where statement is allowed. the same is true for `version`. this is by design.
|
March 11, 2015 Re: enum and static if | ||||
---|---|---|---|---|
| ||||
Posted in reply to ketmar | On Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:
> On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:
>
>> This code does not work:
>>
>> ----
>> enum Test {
>> Foo,
>> static if (__VERSION__ >= 2067)
>> Bar,
>> }
>> Quatz
>> }
>> ----
>>
>> Any chance that this could work?
>
> nope. `static if` is statement, so it works only where statement is
> allowed. the same is true for `version`. this is by design.
You can do something like
static if (__VERSION__ >= 2067)
enum Test{ ... }
else
enum Test{ ... }
as a workaround?
|
March 11, 2015 Re: enum and static if | ||||
---|---|---|---|---|
| ||||
Posted in reply to wobbles Attachments: | On Wed, 11 Mar 2015 14:36:07 +0000, wobbles wrote:
> On Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:
>> On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:
>>
>>> This code does not work:
>>>
>>> ----
>>> enum Test {
>>> Foo,
>>> static if (__VERSION__ >= 2067)
>>> Bar,
>>> }
>>> Quatz
>>> }
>>> ----
>>>
>>> Any chance that this could work?
>>
>> nope. `static if` is statement, so it works only where statement is allowed. the same is true for `version`. this is by design.
>
> You can do something like static if (__VERSION__ >= 2067)
> enum Test{ ... }
> else
> enum Test{ ... }
>
> as a workaround?
sure, but you have to copypaste the whole enum in both places. maybe allowing `version` in enums worth a ER...
|
March 11, 2015 Re: enum and static if | ||||
---|---|---|---|---|
| ||||
Posted in reply to ketmar | On Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote: > On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote: > >> This code does not work: >> >> ---- >> enum Test { >> Foo, >> static if (__VERSION__ >= 2067) >> Bar, >> } >> Quatz >> } >> ---- >> >> Any chance that this could work? > > nope. `static if` is statement, so it works only where statement is > allowed. the same is true for `version`. this is by design. Thanks, I've hoped that 'static if' is a full replacement for #if |
March 11, 2015 Re: enum and static if | ||||
---|---|---|---|---|
| ||||
Posted in reply to Namespace | On Wednesday, March 11, 2015 14:55:01 Namespace via Digitalmars-d-learn wrote: > Thanks, I've hoped that 'static if' is a full replacement for #if Walter Bright has a rather dim view of #if and friends in C/C++ given how often he's seen them abused, which is why version and static if are more restricted in D - in particular, it's why version won't take a boolean expression. And while some folks get really annoyed about having to duplicate code for different versions, he seems to be of the opinion that that's the right way to do it and that the C/C++ way is incredibly error-prone. Personally, I'd say that this particular use case probably would be fine, but it would complicate how static if works, so I suspect that he'd be against it. - Jonathan M Davis |
March 11, 2015 Re: enum and static if | ||||
---|---|---|---|---|
| ||||
Posted in reply to ketmar | On 03/11/15 15:41, ketmar via Digitalmars-d-learn wrote:
> On Wed, 11 Mar 2015 14:36:07 +0000, wobbles wrote:
>
>> On Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:
>>> On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:
>>>
>>>> This code does not work:
>>>>
>>>> ----
>>>> enum Test {
>>>> Foo,
>>>> static if (__VERSION__ >= 2067)
>>>> Bar,
>>>> }
>>>> Quatz
>>>> }
>>>> ----
>>>>
>>>> Any chance that this could work?
>>>
>>> nope. `static if` is statement, so it works only where statement is allowed. the same is true for `version`. this is by design.
>>
>> You can do something like static if (__VERSION__ >= 2067)
>> enum Test{ ... }
>> else
>> enum Test{ ... }
>>
>> as a workaround?
>
> sure, but you have to copypaste the whole enum in both places. maybe allowing `version` in enums worth a ER...
mixin(`
enum Test {
Foo,`
~(__VERSION__>=2067?`
Bar,`:``)
~` Quatz
}`);
artur
|
March 11, 2015 Re: enum and static if | ||||
---|---|---|---|---|
| ||||
Posted in reply to Artur Skawina Attachments: | On Wed, 11 Mar 2015 18:17:38 +0100, Artur Skawina via Digitalmars-d-learn wrote:
> On 03/11/15 15:41, ketmar via Digitalmars-d-learn wrote:
>> On Wed, 11 Mar 2015 14:36:07 +0000, wobbles wrote:
>>
>>> On Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:
>>>> On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:
>>>>
>>>>> This code does not work:
>>>>>
>>>>> ----
>>>>> enum Test {
>>>>> Foo,
>>>>> static if (__VERSION__ >= 2067)
>>>>> Bar,
>>>>> }
>>>>> Quatz
>>>>> }
>>>>> ----
>>>>>
>>>>> Any chance that this could work?
>>>>
>>>> nope. `static if` is statement, so it works only where statement is allowed. the same is true for `version`. this is by design.
>>>
>>> You can do something like static if (__VERSION__ >= 2067)
>>> enum Test{ ... }
>>> else
>>> enum Test{ ... }
>>>
>>> as a workaround?
>>
>> sure, but you have to copypaste the whole enum in both places. maybe allowing `version` in enums worth a ER...
>
> mixin(`
> enum Test {
> Foo,`
> ~(__VERSION__>=2067?`
> Bar,`:``)
> ~` Quatz }`);
>
> artur
yes, it works. it also can be a participant in "ugly D code of the month" contest. ;-)
|
March 11, 2015 Re: enum and static if | ||||
---|---|---|---|---|
| ||||
Posted in reply to ketmar | On Wednesday, 11 March 2015 at 17:19:20 UTC, ketmar wrote:
> On Wed, 11 Mar 2015 18:17:38 +0100, Artur Skawina via Digitalmars-d-learn
> wrote:
>
>> On 03/11/15 15:41, ketmar via Digitalmars-d-learn wrote:
>>> On Wed, 11 Mar 2015 14:36:07 +0000, wobbles wrote:
>>>
>>>> On Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:
>>>>> On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:
>>>>>
>>>>>> This code does not work:
>>>>>>
>>>>>> ----
>>>>>> enum Test {
>>>>>> Foo,
>>>>>> static if (__VERSION__ >= 2067)
>>>>>> Bar,
>>>>>> }
>>>>>> Quatz
>>>>>> }
>>>>>> ----
>>>>>>
>>>>>> Any chance that this could work?
>>>>>
>>>>> nope. `static if` is statement, so it works only where statement is
>>>>> allowed. the same is true for `version`. this is by design.
>>>>
>>>> You can do something like static if (__VERSION__ >= 2067)
>>>> enum Test{ ... }
>>>> else
>>>> enum Test{ ... }
>>>>
>>>> as a workaround?
>>>
>>> sure, but you have to copypaste the whole enum in both places. maybe
>>> allowing `version` in enums worth a ER...
>>
>> mixin(`
>> enum Test {
>> Foo,`
>> ~(__VERSION__>=2067?`
>> Bar,`:``)
>> ~` Quatz }`);
>>
>> artur
>
> yes, it works. it also can be a participant in "ugly D code of the month"
> contest. ;-)
The second prize in this contest could for:
mixin(`
enum Test {
Foo,
%s
Quatz
}`
.format(__VERSION__ >= 2067 ? "Bar," : ""));
:)
|
Copyright © 1999-2021 by the D Language Foundation