Aliasing current function template instance

Jean-Louis Leroy jl at leroy.nyc
Fri May 1 20:52:34 UTC 2020


On Friday, 1 May 2020 at 20:43:05 UTC, Steven Schveighoffer wrote:
> On 5/1/20 4:28 PM, Jean-Louis Leroy wrote:
>
>> Something I have overlooked? Any ideas?
>> 
>
> This trick works. No idea who came up with it:
>
> alias thisFunction = __traits(parent, {});
>
> -Steve

I think I get the idea. Alas it doesn't work inside a function 
template, because it returns the template, not the instance:

  void foo(T)(lazy T)
  {
    alias thisFunction = __traits(parent, {});
    pragma(msg, thisFunction.stringof);
    //pragma(msg, Parameters!thisFunction); // later
  }

  void main()
  {
    foo(0);
    foo("");
  }

prints:

   foo(T)(lazy T)
   foo(T)(lazy T)

Uncommenting the line that is (more or less) my real goal:

aliasthisfunction.d(7): Error: template instance 
`std.traits.Parameters!(foo)` does not match template declaration 
`Parameters(func...)`
   with `func = (foo(T)(lazy T))`
   must satisfy the following constraint:
`       isCallable!func`



More information about the Digitalmars-d-learn mailing list