On Fri, Jan 05, 2024 at 08:41:53PM +0000, Noé Falzon via Digitalmars-d-learn wrote: > On the subject of `map` taking the function as template parameter, I > was surprised to see it could still be used with functions determined > at runtime, even closures, etc. I am trying to understand the > mechanism behind it.
That's simple, if the argument is a runtime function, it is treated as a function pointer (or delegate). [...] > In fact, how can the template be instantiated at all in the following > example, where no functions can possibly be known at compile time: > > ``` > auto do_random_map(int delegate(int)[] funcs, int[] values) > { > auto func = funcs.choice; > return values.map!func; > } > ``` [...] The argument is taken to be a delegate to be bound at runtime. In the instantiation a shim is inserted to pass along the delegate from the caller's context. T -- Creativity is not an excuse for sloppiness.