I would like to have a template which returns
appropriate delegate, something like this:
module mod1;
import std.algorithm;
import std.array;
import std.stdio;
template DG(RT, T, F)
{
auto DG(F fun)
{
RT delegate(T p)dg;
dg = fun;
return dg;
}
}
void main()
{
string[] haystack = ["item 1", "item 2", "item 3"];
string needle = "item 2";
auto flt = (string s){return s == needle;};
auto dg = DG!(bool, string, typeof(flt))(flt);
auto result = filter!(dg)(haystack);
writeln(result);
}
The thing is I don't know what am I doing wrong here,
because sometimes works and sometimes doesn't.
For instance, if I'd added another file along with mod1.d, let's say,
mod2.d which contained:
module mod2;
import std.conv;
import std.string;
import std.random;
and compiled it like this: dmd mod2.d mod1.d, the program would produce
segmentation fault.
It works fine when packages in mod2 are omitted.
What would be the correct way for templated delegate?