opDispatch and compile time parameters

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Mon Oct 19 11:44:33 PDT 2015


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.

- Jonathan M Davis


More information about the Digitalmars-d mailing list