Order of static this() execution?

drathier forum.dlang.org at fi.fo
Sun Feb 23 14:51:25 UTC 2020


On Sunday, 23 February 2020 at 14:36:56 UTC, Johan Engelen wrote:
> It's not clear from the language specification, but in this 
> case with templates, I am not surprised that the order of 
> execution is not the same as in the source file. Probably it 
> does fit with the order in the source file if you take into 
> account where the template is instantiated in that file (but 
> you shouldn't depend on that).
> I strongly recommend not to depend on the order of multiple 
> static this execution, by either rewriting things or by 
> including some logic to make sure things are called in the 
> right order (checking that something has already run, and 
> running it if not, or cancel running it if it already ran)
>
> -Johan

This is generated code, so all defs are already topo-sorted. The 
template is instantiated before it's used, and in the .d.cg file 
it's also seemingly in the expected order. I'd be happy to put 
all initialisation code into a single static this(), but I'm not 
sure how to do that when templates get involved. Since it's 
generated code, the set of things that are easy/hard to do kinda 
swap around.


More information about the Digitalmars-d-learn mailing list