dmd 2.063 beta 5
Steven Schveighoffer
schveiguy at yahoo.com
Thu May 23 14:17:26 PDT 2013
On Thu, 23 May 2013 17:06:57 -0400, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:
> On Thu, 23 May 2013 16:42:30 -0400, Artur Skawina <art.08.09 at gmail.com>
> wrote:
>> For example you couldn't then do this:
>>
>> struct Packet(uint TY) { /*...*/immutable uint type=TY; immutable ubyte
>> len=PLen(TY); /*...*/ }
>> auto PProcess(PT)(PT* p) { static if (p.type<128) if (p.type==42)
>> sendp(p, p.len*4); }
>
> static if(TY < 128) if(TY == 42) ....
Sorry, I realize this wouldn't work. You must enum the TY in order to
fetch it in PProcess, or declare type and len static.
But the point is still valid, you cannot use the runtime value of a member
variable for const folding.
You can use both the runtime value to occupy space, and the compile-time
value to do tests. For instance:
struct Packet(uint TY) { enum type = TY; private immutable _type = type;
enum len = PLen(TY); private immutable _len = len; ...}
In the current compiler, it's pretty much impossible to do this, unless
you use a trick like I outlined in the last post.
-Steve
More information about the Digitalmars-d-announce
mailing list