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.

Reply via email to