On Monday, 28 August 2023 at 10:20:14 UTC, Basile B. wrote:
On Monday, 28 August 2023 at 06:38:50 UTC, Vino wrote:
Hi All,

The the below code is not working, hence requesting your help.

Code:
```
import std.stdio;
import std.process: environment;
void main () {
   int* ext(string) = &environment.get("PATHEXT");
   writeln(*ext);
}
```

Problems is that "PATHEXT" is a runtime argument. If you really want to get a pointer to the function for that runtime argument you can use a lambda:

```d
import std.stdio;
import std.process: environment;
void main () {

alias atGet = {return environment.get("PATHEXT");}; // really lazy

    writeln(atGet);         // pointer to the lambda
    writeln((*atGet)());    // call the lambda
}
```

There might be other ways, but less idiomatic (using a struct + opCall, a.k.a a "functor")

To go further, the correct code for syntax you wanted to use is actually

```d
alias Ext_T = string (const char[] a, string b); // define a function type
alias Ext_PT = Ext_T*; // define a function **pointer** type
Ext_PT ext = &environment.get;
```

But as you can see that does not allow to capture the argument. Also it only work as AliasDeclaration RHS.

Reply via email to