Lambda D:不需要的匿名函数属性

Lambda D:不需要的匿名函数属性,lambda,d,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

考虑以下模板:

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\u arr
则不是

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



编辑:根据接受答案中的建议提交的错误报告:

我认为这是一个从内置属性推断属性的错误。你可以在D的问题追踪器上报告


但是,请注意,内置的
.sort
属性/函数即将被弃用。请改用
std.algorithm.sort
,这不应该有这个问题。

我的目标是
std.algorithm.sort
,我没有意识到有一个内置的…为了澄清,你需要导入
std.algorithm
并执行
arr.sort()
而不是
arr.sort
。这是出于历史原因,一旦正确移除内置排序,最终将不再需要。