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