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.