www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - generic function instance without call

reply vit <vit vit.vit> writes:
Hi, is it possible to get address of generic function instance 
for specified arguments without calling the function?

Example:


```d

auto foo(alias fn, Args...)(auto ref Args args){
     ///return function/delegate type of `fn` for arguments `args`
}

void main(){

     long x;

     auto fn = foo!((a, b) => true)(new int(42), x);

     static assert(is(typeof(fn) == bool function(int*, scope ref 
long) safe pure nothrow  nogc ));
}

```
Apr 27 2022
next sibling parent vit <vit vit.vit> writes:
Fix:
```d
auto fn = foo!((a, ref b) => true)(new int(42), x);
```
Apr 27 2022
prev sibling parent reply user1234 <user1234 12.de> writes:
On Wednesday, 27 April 2022 at 15:23:26 UTC, vit wrote:
 Hi, is it possible to get address of generic function instance 
 for specified arguments without calling the function?

 Example:


 ```d

 auto foo(alias fn, Args...)(auto ref Args args){
     ///return function/delegate type of `fn` for arguments 
 `args`
 }

 void main(){

     long x;

     auto fn = foo!((a, b) => true)(new int(42), x);

     static assert(is(typeof(fn) == bool function(int*, scope 
 ref long) safe pure nothrow  nogc ));
 }

 ```
yeah sure; declare an alias that (fully) specialize the generic func and take the address using the alias Identifier.
Apr 27 2022
parent reply vit <vit vit.vit> writes:
On Wednesday, 27 April 2022 at 16:03:32 UTC, user1234 wrote:
 On Wednesday, 27 April 2022 at 15:23:26 UTC, vit wrote:
 Hi, is it possible to get address of generic function instance 
 for specified arguments without calling the function?

 Example:


 ```d

 auto foo(alias fn, Args...)(auto ref Args args){
     ///return function/delegate type of `fn` for arguments 
 `args`
 }

 void main(){

     long x;

     auto fn = foo!((a, b) => true)(new int(42), x);

     static assert(is(typeof(fn) == bool function(int*, scope 
 ref long) safe pure nothrow  nogc ));
 }

 ```
yeah sure; declare an alias that (fully) specialize the generic func and take the address using the alias Identifier.
This work for types but not for attributes like `scope`, `return` and `auto ref`.
Apr 27 2022
parent user1234 <user1234 12.de> writes:
On Wednesday, 27 April 2022 at 17:22:14 UTC, vit wrote:
 This work for types but not for attributes like `scope`, 
 `return` and `auto ref`.
Oh sorry... auto ref... I totally forgot [this old bug] [this old bug]: https://issues.dlang.org/show_bug.cgi?id=8204
Apr 27 2022