Re: Compiling a template

2018-12-06 Thread albertas-jn via Digitalmars-d-learn

On Friday, 7 December 2018 at 01:21:42 UTC, Ali Çehreli wrote:

There is no trace of the template in the library or the object 
file. You can investigate the compiled symbols with e.g. the 
'nm' tool on Linux systems:


// deneme.d:
void foo(T)(T t) {
import std.stdio;
writeln(t);
}

void main() {
// foo(42);
}

$ dmd deneme.d -lib
$ nm deneme.a | grep foo

No trace of foo... Now uncomment the line in main and repeat:

$ dmd deneme.d -lib
$ nm deneme.a | grep foo
 U _D6deneme__T3fooTiZQhFNfiZv
 W _D6deneme__T3fooTiZQhFNfiZv

"W" indicates a definition.


I see, what confused me was that if I put main() in a different 
file and


$ dmd main.d deneme.a

the program compiled properly. Now I realize that in this case 
deneme.a file was ignored and the source file was used instead. I 
expected an error. Thank you for your answers.




Compiling a template

2018-12-06 Thread albertas-jn via Digitalmars-d-learn
If templates are a compile-time feature and instances of 
templates are generated by compiler at compile time, why is it 
possible to compile a template definition with dmd -lib or -c?