This code won't compile:
class E(Types...)
{
void apply(U)(U delegate(Types[0]) f0)
{
}
}
void test()
{
E!int e;
int f(int) { return 0; }
e.apply(&f);
}
ace@ANTEC:~/projects/bugs/dmd$ dmd -c rejectsvalid1.d
rejectsvalid1.d(15): Error: template rejectsvalid1.E!int.E.apply cannot deduce function from argument types !()(int delegate(int _param_0)), candidates are:
rejectsvalid1.d(4): rejectsvalid1.E!int.E.apply(U)(U delegate(Types[0]) f0)
However, one can make it compile by introducing an alias:
class E(Types...)
{
alias Types[0] T0;
void apply(U)(U delegate(T0) f0)
{
}
}
I'm using DMD64 D Compiler v2.068.2