On 02/25/2012 08:12 AM, Timon Gehr wrote: > On 02/24/2012 07:22 PM, simendsjo wrote: >> I have a C function taking a callback function as a parameter. My >> thought was to wrap this up using a template, but I cannot get it to >> work: >> >> extern(C) alias void function() Callback; >> >> template Wrap(alias dg) >> { >> extern(C) void Wrap() >> { >> dg(); >> } >> } >> >> void main() >> { >> Callback cb = &Wrap!( () {} ); >> } >> >> Error: cannot implicitly convert expression (&Wrap) of type void >> delegate() pure nothrow @safe to extern (C) void function() > > This is a bug. '() {}' should be inferred as void function()pure nothrow > @safe.
Not according to the spec: "If the keywords function or delegate are omitted, it defaults to being a delegate"
http://dlang.org/expression.html#FunctionLiteral > Workaround: The code compiles if you use function() {} instead. If I read the spec correctly, one must use the 'function' keyword. Ali