On Thu, Aug 01, 2013 at 10:06:54PM +0200, JS wrote: [...] > Now are you telling me that > > template A() > { > void foo() { writeln("asdf"); } > } > void main() > { > A!().foo(); > } > > does not create a function foo in the binary? That it is equivalent > to just calling writeln("asdf"); directly? (exact same code) [...]
I said that every instantiation of a template creates a copy of everything inside. Therefore, A!().foo() will create a copy of A.foo() in the binary. The template itself has no binary representation, in the sense that if you write: template A(int x) { void foo() { writeln(x); } } there is nothing in the binary corresponding with the template A, or the uninstantiated function foo. But if you instantiate A with some value of x, then you will get a copy of A.foo for every value of x that you instantiate the template with. So if you write: A!1.foo(); A!2.foo(); A!3.foo(); Then you will get 3 copies of foo() in your executable, one for each value of x. T -- What do you get if you drop a piano down a mineshaft? A flat minor.