www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - nogc deduction for templated functions

reply David Zhang <straivers98 gmail.com> writes:
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.
Nov 18
next sibling parent Eugene Wissner <belka caraus.de> writes:
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?
Nov 18
prev sibling parent reply Jonathan M Davis <newsgroup.d jmdavisprog.com> writes:
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
Nov 18
parent David Zhang <straivers98 gmail.com> writes:
Huh, I think I did something weird. It compiles now, and I don't 
know why. Thanks for your answers.
Nov 18