alias add1(T1,T2) = (T1 a, T2 b) => a+b; int add2(T1,T2) (T1 a, T2 b) { return a+b; } void main() { import std.stdio; add1(1,1).writeln; // cannot deduce function from argument types !()(int, int) add2(1,1).writeln; // OK }
(In reply to Daniel from comment #0) > alias add1(T1,T2) = (T1 a, T2 b) => a+b; > int add2(T1,T2) (T1 a, T2 b) { return a+b; } > > void main() > { > import std.stdio; > add1(1,1).writeln; // cannot deduce function from argument types !()(int, > int) > add2(1,1).writeln; // OK > } It's maybe a dup of 1807. I asked this a while ago on the forum (IFTI failed in partial template specialization). http://forum.dlang.org/post/yhzadvyxijdyyoreatey@forum.dlang.org => https://issues.dlang.org/show_bug.cgi?id=1807
> alias add1(T1,T2) = (T1 a, T2 b) => a+b; > int add2(T1,T2) (T1 a, T2 b) { return a+b; } I think this should be changed to an enhancement, because add1 is a function literal template, whereas add2 is a function template. A function literal is a pointer, a function is not.