On 9/28/21 1:59 AM, james.p.leblanc wrote:
On Tuesday, 28 September 2021 at 05:26:29 UTC, Ali Çehreli wrote:
On 9/27/21 10:38 AM, james.p.leblanc wrote:
In addition to what Mike Parker said, templates do complicate matters
here: Templates are instantiated (i.e. compiled for a specific set of
template arguments) by modules that actually use those templates.
Ali, this is great! ...I had been tempted to also ask about how templates
figure into this, but realized that including this in my question would be
over complicating the question, so it remained unasked.
But, now I have this part answered as well. I very much appreciate the
mind-reading tricks going on here on the forum!
Be aware that the compiler might not include the code for the template
in the instantiating module if it detects that the instantiation could
already have been generated in an imported module (not one passed on the
command line).
For example, if Ali's module `a` contained an alias:
```d
module a;
auto doubled(T)(T value) {
return value * 2;
}
alias doubleInt = doubled!int;
```
Now the compiler might say "hey, a.d already has instantiated that one,
and it's not being built by me, so I'll assume it has already generated
the code" and doesn't do it.
-Steve