Using delegates in callbacks for extern(C) functions

Ali Çehreli acehreli at yahoo.com
Mon Feb 27 16:42:06 PST 2012


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



More information about the Digitalmars-d-learn mailing list