On Saturday, 18 June 2016 at 18:13:22 UTC, Johan Engelen wrote:
An example of how __FILE__ as template parameter will break
your library:
In library, distributed in binary+source form:
```
alias file_templ_alias = file_templ!bool;
T file_templ(T, string file = __FILE__, size_t line = __LINE__)
(T value) {
return value;
}
```
In user code, linking to the library binary:
```
bool foo(bool b){
return file_templ_alias(b);
}
```
By calling the alias, both DMD and LDC will decide that the
template does not need reinstantiation in the user object file
and will try to link with the symbol in the library binary. So
you have to be lucky to install the library source in the same
path as where it was when the library was built on someone
else's machine, otherwise you'll get a linker error and are
left wondering what went wrong.
-Johan
Can't one just use __MODULE__ instead?
So:
T file_templ(T, string mod = __MODULE__, size_t line = __LINE__)
(T value) {
return value;
}