opDispatch and compile time parameters

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Mon Oct 19 12:54:39 PDT 2015


On 10/19/2015 02:44 PM, Jonathan M Davis wrote:
> On Monday, 19 October 2015 at 18:26:45 UTC, Adam D. Ruppe wrote:
>> On Monday, 19 October 2015 at 18:16:15 UTC, Andrei Alexandrescu wrote:
>>> Tangentially related: since when we allow field initialization with
>>> new? I was surprised to see that this works:
>>
>> Since CTFE started supporting it... this might actually be an
>> unintentional feature.
>>
>> Since the initializer is in a static context, the right hand side gets
>> CTFE'd, which means that actually points to an array in the data
>> segment... the *same* array in the data segment for all
>> initializations (the pointer is just blitted over with the rest of
>> init), which might be a bit surprising.
>>
>> I've seen a lot of people do this with classes not realizing it makes
>> a static instance!
>
> Yeah. It makes sense when you're dealing with an immutable object/arrays
> (and possibly const, assuming that it wasn't initialized with a mutable
> variable that was directly initialized via new), but it really makes no
> sense for mutable objects/arrays - not unless you have some weird case
> where you want each instance of your object to be able to share that
> member variable initially and then possibly stop sharing later. But
> given the high probability that someone is going to do this and shoot
> themselves in the foot, I think that we'd be a lot better off if we
> disallowed it.

Urgh. That looks like quite a bit of a bummer. -- Andrei



More information about the Digitalmars-d mailing list