On Thursday, 7 December 2017 at 21:32:24 UTC, Walter Bright wrote:
On 12/7/2017 2:07 AM, Nicholas Wilson wrote:
Doesn't work for templates.

I don't know how your code is organized, but if the template is instantiated in another file, it won't have code generated for it either.

As a trivial example:

bar.d:
module bar;
string generatesMixin(T)()
{
    return T.stringof ~ " foo;";
}


a.d:
@compute(CompileFor.deviceOnly) module a;

int baz()
{
    mixin(generatesMixin!int());
    return foo;
}

a's symbol table contains `baz` and `generatesMixin!int`. generateMixin deals with strings which are not allowed (global variables are unsupported). This would fail compilation. If `generatesMixin` were to be marked `@ctfeonly`, this would pass.

Reply via email to