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

Reply via email to