Is enum static?

Borislav Kosharov boby_dsm at abv.bg
Tue Aug 20 12:58:12 PDT 2013


On Tuesday, 20 August 2013 at 19:33:25 UTC, John Colvin wrote:
> On Tuesday, 20 August 2013 at 19:25:56 UTC, Jonathan M Davis 
> wrote:
>> On Tuesday, August 20, 2013 20:38:52 John Colvin wrote:
>>> On Tuesday, 20 August 2013 at 17:02:07 UTC, Jonathan M Davis
>>> 
>>> wrote:
>>> > On Tuesday, August 20, 2013 12:54:29 John Colvin wrote:
>>> >> is there an allocation in this?
>>> >> 
>>> >> enum vals=[1, 2, 3, 0];
>>> >> 
>>> >> int[4] a;
>>> >> a[] = vals[];
>>> > 
>>> > Since, you're asking it to copy the elements of a dynamic 
>>> > array
>>> > to a static
>>> > one, I would fully expect it to result in an allocation, 
>>> > though
>>> > a smart
>>> > compiler might optimize it out. I wouldn't expect dmd to do
>>> > that though.
>>> > 
>>> > - Jonathan M Davis
>>> 
>>> So you're saying it will allocate a new dynamic array, 
>>> initialise
>>> it with 1,2,3,0 and then copy the elements from that new 
>>> array to
>>> the static one? That's not good...
>>
>> Well, that's what you told it to do semantically. The compiler 
>> could
>> theoretically optimize it (and hopefully will eventually), but 
>> it would be an
>> optimization. At this point, if you initialize the static 
>> array with an array
>> literal, then it will avoid the allocation (though it didn't 
>> used to), but
>> AFAIK, it'll still allocate with your example.
>>
>> - Jonathan M Davis
>
> I presume there's a good reason why we don't have:
>   enum a = [1,2,3,4];
>   assert assert(is(typeof(a) == int[4]));
>
> this works after all:
>   enum int[4] a = [1,2,3,4];
>   assert assert(is(typeof(a) == int[4]));

Did you mean static assert and not assert assert or am I missing 
something?


More information about the Digitalmars-d-learn mailing list