Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 18, 2017 @nogc deduction for templated functions | ||||
---|---|---|---|---|
| ||||
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. |
November 18, 2017 Re: @nogc deduction for templated functions | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Zhang | 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?
|
November 18, 2017 Re: @nogc deduction for templated functions | ||||
---|---|---|---|---|
| ||||
Posted in reply to David Zhang | 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
|
November 18, 2017 Re: @nogc deduction for templated functions | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan M Davis | Huh, I think I did something weird. It compiles now, and I don't know why. Thanks for your answers. |
Copyright © 1999-2021 by the D Language Foundation