Sorry for the very generic title, didn't knew how to put it.
This snippet should compile:
```
T[] tail (T) (T[] v, in T[] i, out T[] o)
{
return v;
}
void main ()
{
const(char)[] p1, p2;
immutable(char)[] pi;
tail(p1, pi, p2);
}
```
As there is one possible instantiation for tail, which is `T=const(char)`.
But here the compiler fails to see it and spit out:
```
lol.d(11): Error: template lol.tail cannot deduce function from argument types !()(const(char)[], string, const(char)[]), candidates are:
lol.d(1): lol.tail(T)(T[] v, in T[] i, out T[] o)
```
Comment #1 by uplink.coder — 2016-12-02T00:47:01Z
works as intended.
Template types must no coerce.
Comment #2 by robert.schadek — 2024-12-13T18:50:52Z