Sorry, I have to correct it : R delegate(U) Curry1(R,X,U...)(R delegate(X,U) dg,X arg) { struct Foo { typeof(dg) dg_m; X arg_m; R bar(U args) { return dg_m(arg_m,args); } } Foo* f = new Foo; f.dg_m = dg; f.arg_m = arg; return &f.bar; }