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;
}

Reply via email to