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