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