Is it possible, inside a function template, to create an alias to the instantiated function? IOW the equivalent of __FUNCTION__, but yielding an alias?

The closest I came is:

  import std.string;
  import std.traits;

  void foo(T)(lazy T)
  {
    mixin(
      "alias thisFunction = ",
      __FUNCTION__[0..__FUNCTION__.lastIndexOf('.')],
      ";");
    pragma(msg, Parameters!thisFunction);
  }

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

  dmd -c aliasthisfunction.d
  (lazy int)
  (lazy string)

...but (unsurprisingly) this fails in presence of overloads. I.e. if I throw in:

  void foo(T)(int, T);

...then I get:

aliasthisfunction.d(6): Error: template `aliasthisfunction.foo` matches more than one template declaration:
  aliasthisfunction.d(4):     `foo(T)(lazy T)`
  and
  aliasthisfunction.d(20):     `foo(T)(int, T)`
  ...

Something I have overlooked? Any ideas?

Reply via email to