Capturing Caller UDAs as CT Template Function Parameters

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon May 18 15:16:57 PDT 2015


On Monday, 18 May 2015 at 21:35:44 UTC, Per Nordlöw wrote:
>     void yield(T)(ref T value)
>     {
>         mixin("alias caller = " ~ caller ~ ";");
>     }
>
> doesn't work across module boundaries not even for 
> `__PRETTY_FUNCTION__`.
>
> Do we need need to fix the compiler, Walter?! ;)

You have to import the module, too:
----
void yield(T, string caller_str = __FUNCTION__)(ref T value)
{
     import std.array: join, split;
     enum module_str = caller_str.split(".")[0 .. $ - 1].join(".");
     mixin("static import " ~ module_str ~  ";");
     mixin("alias caller = " ~ caller_str ~ ";");
}
----

This fails for methods, of course. I guess you could remove 
elements from the back of __FUNCTION__ until it compiles as a 
module, and then import that.


More information about the Digitalmars-d-learn mailing list