Testcase:
```
struct S {
void foo(int a) {}
void foo_old(long a) {}
alias foo(I: int) = foo_old;
}
void templ(alias IMPL)() {
pragma(msg, typeof(IMPL));
}
void foo() {
S s;
templ!(mixin("S.foo"));
templ!(S.foo); // no new pragma output because same
// template instantation as previous line
templ!(mixin("S.foo!int"));
//templ!(S.foo!int); // Error: example.S.foo is not a template, it is a function
}
```
Compilation with dlang 2.098 or older outputs:
```
void(int a)
void(long a)
```
Compilation with dlang 2.099 outputs:
```
void(int a)
<source>(17): Error: `example.S.foo` is not a template, it is a function
```
The actual case in our case was more complicated and magically was fixed with dlang 2.099 after replacing `S` by `s` in `templ!(mixin("S.foo!int"));` (change of type --> variable)...