Consider the following template:
mixin template test(void function() callback)
{
static this()
{
callback();
}
}
This works:
mixin test!(&sort_arr);
void sort_arr()
{
arr.sort;
}
However this doesn't work:
mixin test!({ arr.sort; });
DMD gives the following error:
Error: safe function 'main.__lambda6' cannot call system function '_adSort'
Error: @nogc function 'main.__lambda6' cannot call non-@nogc function '_adSort'
It seems to me that the lambda version is inferred to be safe @nogc
, while the explicit sort_arr
isn't.
How can I overcome this and pass an anonymous lambda to this template?
Edit: bug report filed as per the recommendation in the accepted answer: https://issues.dlang.org/show_bug.cgi?id=13481
I think this is a bug with inferring attributes from built-in properties. You can report it at D's issue tracker, at http://issues.dlang.org/.
However, note that the built-in .sort
property/function is on its way to being deprecated. Please use std.algorithm.sort
instead, which shouldn't have this issue.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With