Passing nested template function

aliak something at something.com
Sat Aug 10 18:07:42 UTC 2019


On Saturday, 10 August 2019 at 17:45:43 UTC, Prateek Nayak wrote:
> A nested function can be passed to another function evident 
> from this example: https://run.dlang.io/is/6waRkB
>
> However if the nested function is a template function, it 
> raises an error
> https://run.dlang.io/is/PQhkwl
> The error being: cannot get frame pointer to the nested function
>
> Is there a way to pass a nested template function to a function 
> declared outside the outer function scope?

This looks like it could be a bug to me. If you explicitly 
instantiate the nested template and call dispatch like 
dispatch!(nested!0) then it works.

An alias template parameter can accept both a template and an 
instantiated template. I.e.

template X(T) {}
alias A = X; // ok
alias B = X!int; // ok

So it's unclear what should happen. At the least, the defaulted 
argument should be applied at the call site (Func(a)).

Note though that neither versions will work on ldc or gdc 
however. Because there's a bug [0] that has only been fixed in 
for dmd.

[0] https://github.com/dlang/dmd/pull/9282


More information about the Digitalmars-d-learn mailing list