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.

Reply via email to