Re: @nogc deduction for templated functions
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
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
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
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.