digitalmars.D.learn - enum and static if
- Namespace (11/11) Mar 11 2015 This code does not work:
- ketmar (3/16) Mar 11 2015 nope. `static if` is statement, so it works only where statement is=20
- wobbles (7/24) Mar 11 2015 You can do something like
- ketmar (3/29) Mar 11 2015 sure, but you have to copypaste the whole enum in both places. maybe=20
- Artur Skawina via Digitalmars-d-learn (9/40) Mar 11 2015 mixin(`
- ketmar (4/45) Mar 11 2015 yes, it works. it also can be a participant in "ugly D code of the month...
- Nicolas Sicard (10/59) Mar 11 2015 The second prize in this contest could for:
- Namespace (2/19) Mar 11 2015 Thanks, I've hoped that 'static if' is a full replacement for #if
- Jonathan M Davis via Digitalmars-d-learn (11/12) Mar 11 2015 Walter Bright has a rather dim view of #if and friends in C/C++ given ho...
This code does not work: ---- enum Test { Foo, static if (__VERSION__ >= 2067) Bar, } Quatz } ---- Any chance that this could work?
Mar 11 2015
On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:This code does not work: =20 ---- enum Test { Foo, static if (__VERSION__ >=3D 2067) Bar, } Quatz } ---- =20 Any chance that this could work?nope. `static if` is statement, so it works only where statement is=20 allowed. the same is true for `version`. this is by design.=
Mar 11 2015
On Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:You can do something like static if (__VERSION__ >= 2067) enum Test{ ... } else enum Test{ ... } as a workaround?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.
Mar 11 2015
On Wed, 11 Mar 2015 14:36:07 +0000, wobbles wrote:On Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:sure, but you have to copypaste the whole enum in both places. maybe=20 allowing `version` in enums worth a ER...=On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:=20 You can do something like static if (__VERSION__ >=3D 2067) enum Test{ ... } else enum Test{ ... } =20 as a workaround?This code does not work: =20 ---- enum Test { Foo, static if (__VERSION__ >=3D 2067) Bar, } Quatz } ---- =20 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.
Mar 11 2015
On 03/11/15 15:41, ketmar via Digitalmars-d-learn wrote:On Wed, 11 Mar 2015 14:36:07 +0000, wobbles wrote:mixin(` enum Test { Foo,` ~(__VERSION__>=2067?` Bar,`:``) ~` Quatz }`); arturOn Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:sure, but you have to copypaste the whole enum in both places. maybe allowing `version` in enums worth a ER...On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:You can do something like static if (__VERSION__ >= 2067) enum Test{ ... } else enum Test{ ... } as a workaround?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.
Mar 11 2015
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:yes, it works. it also can be a participant in "ugly D code of the month"=20 contest. ;-)=On Wed, 11 Mar 2015 14:36:07 +0000, wobbles wrote: =20=20 mixin(` enum Test { Foo,` ~(__VERSION__>=3D2067?` Bar,`:``) ~` Quatz }`); =20 arturOn Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:=20 sure, but you have to copypaste the whole enum in both places. maybe allowing `version` in enums worth a ER...On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:You can do something like static if (__VERSION__ >=3D 2067) enum Test{ ... } else enum Test{ ... } as a workaround?This code does not work: ---- enum Test { Foo, static if (__VERSION__ >=3D 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.
Mar 11 2015
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:The second prize in this contest could for: mixin(` enum Test { Foo, %s Quatz }` .format(__VERSION__ >= 2067 ? "Bar," : "")); :)On 03/11/15 15:41, ketmar via Digitalmars-d-learn wrote:yes, it works. it also can be a participant in "ugly D code of the month" contest. ;-)On Wed, 11 Mar 2015 14:36:07 +0000, wobbles wrote:mixin(` enum Test { Foo,` ~(__VERSION__>=2067?` Bar,`:``) ~` Quatz }`); arturOn Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:sure, but you have to copypaste the whole enum in both places. maybe allowing `version` in enums worth a ER...On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:You can do something like static if (__VERSION__ >= 2067) enum Test{ ... } else enum Test{ ... } as a workaround?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.
Mar 11 2015
On Wednesday, 11 March 2015 at 14:34:32 UTC, ketmar wrote:On Wed, 11 Mar 2015 13:48:45 +0000, Namespace wrote:Thanks, I've hoped that 'static if' is a full replacement for #ifThis 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.
Mar 11 2015
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 #ifWalter 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
Mar 11 2015