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