Re: @nogc deduction for templated functions

2017-11-18 Thread David Zhang via Digitalmars-d-learn
Huh, I think I did something weird. It compiles now, and I don't 
know why. Thanks for your answers.


Re: @nogc deduction for templated functions

2017-11-18 Thread Eugene Wissner via Digitalmars-d-learn

On Saturday, 18 November 2017 at 17:28:14 UTC, David  Zhang wrote:

Hi,

Is there a way for a templated function to deduce or apply the 
@safe/@nogc attributes automaticaly? I feel like I remember dmd 
doing so at one point, but it doesn't appear to work anymore. 
In particular, I need to call a function belonging to a 
templated type, but do not know what attributes are applied.


eg.

void func(T)(T t)
{
//Don't know if safe or nogc
t.someFunc();
}

Thanks.


If you instantiate  "func" the compiler should correctly infer 
the attributes. Do you have any code where it doesn't work?


Re: @nogc deduction for templated functions

2017-11-18 Thread Jonathan M Davis via Digitalmars-d-learn
On Saturday, November 18, 2017 17:28:14 David Zhang via Digitalmars-d-learn 
wrote:
> Hi,
>
> Is there a way for a templated function to deduce or apply the
> @safe/@nogc attributes automaticaly? I feel like I remember dmd
> doing so at one point, but it doesn't appear to work anymore. In
> particular, I need to call a function belonging to a templated
> type, but do not know what attributes are applied.
>
> eg.
>
> void func(T)(T t)
> {
>  //Don't know if safe or nogc
>  t.someFunc();
> }
>
> Thanks.

pure, nothrow, @safe, and @nogc are infered for templated functions. So,
whether those attributes apply when they're not explicitly marked on a
templated function deponds on the contents of the function. You can test it
with a unit test. e.g.

@nogc unittest
{
...
foo.func();
}

will give a compiler error if func wasn't infered as @nogc.

- Jonathan M Davis



@nogc deduction for templated functions

2017-11-18 Thread David Zhang via Digitalmars-d-learn

Hi,

Is there a way for a templated function to deduce or apply the 
@safe/@nogc attributes automaticaly? I feel like I remember dmd 
doing so at one point, but it doesn't appear to work anymore. In 
particular, I need to call a function belonging to a templated 
type, but do not know what attributes are applied.


eg.

void func(T)(T t)
{
//Don't know if safe or nogc
t.someFunc();
}

Thanks.