D:不期望的匿名函数属性

时间:2014-09-16 05:41:41

标签: lambda d

考虑以下模板:

mixin template test(void function() callback)
{
    static this()
    {
        callback();
    }
}

这有效:

mixin test!(&sort_arr);
void sort_arr()
{
    arr.sort;
}

然而,这不起作用:

mixin test!({ arr.sort; });

DMD出现以下错误:

Error: safe function 'main.__lambda6' cannot call system function '_adSort'
Error: @nogc function 'main.__lambda6' cannot call non-@nogc function '_adSort'

在我看来,lambda版本被推断为safe @nogc,而显式sort_arr则不是。

如何克服这个问题并将匿名lambda传递给此模板?


修改:根据接受的答案中的建议提交的错误报告:https://issues.dlang.org/show_bug.cgi?id=13481

1 个答案:

答案 0 :(得分:3)

我认为这是一个从内置属性推断属性的错误。您可以在问题跟踪器http://issues.dlang.org/上报告。

但请注意,内置的.sort属性/函数正在被弃用。请改用std.algorithm.sort,而不应该出现此问题。