what are the rules for @nogc and @safe attributes inference?
ikod
geller.garry at gmail.com
Fri Nov 16 21:15:03 UTC 2018
On Friday, 16 November 2018 at 12:12:12 UTC, Alex wrote:
>> =====================================================
>> This code compiles as long as `lazy` is commented out. But I'd
>> like to have
>> both lazy parameter and @nogc inferrence for `library_func` so
>> that user is not locked to code @nogc or not.
>
> Aha, aha... Interesting!
> I had a similar problem with passing a delegate. And it was
> solved:
> https://forum.dlang.org/thread/erznqknpyxzxqivawnix@forum.dlang.org
>
> For your problem, there is a bug report:
> https://forum.dlang.org/post/wedwfooqdxbwxttpmzim@forum.dlang.org
> https://issues.dlang.org/show_bug.cgi?id=12664
> https://issues.dlang.org/show_bug.cgi?id=12647
Thanks for these links.
And yes, I have workaround with handmade delegate. It compiles
and it is lazy, but also ugly.
import std.traits;
T library_func(T)(/*not lazy*/ T i) if (!isCallable!T)
{
return i;
}
ReturnType!T library_func(T)(/*lazy*/ T i) if (isCallable!T)
{
return i();
}
void user_function_nogc() @nogc
{
int x = 1;
library_func(x+1);
}
void user_function_gc()
{
library_func(()=>[1]);
}
void main()
{
}
More information about the Digitalmars-d-learn
mailing list