考虑以下模板:
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
答案 0 :(得分:3)
我认为这是一个从内置属性推断属性的错误。您可以在问题跟踪器http://issues.dlang.org/上报告。
但请注意,内置的.sort
属性/函数正在被弃用。请改用std.algorithm.sort
,而不应该出现此问题。