It seems possible that we can print CTFE variables at compile time by using string mixes as the code below demonstrates.

The problem is that we can not pass a variable to a template to create a print routine in the first place. e.g., we can't do mixin a!(s) if s is a string since s can't be read, supposedly, at compile time.

We can't even do mixin("mixin a!(\""~s~"\");") though to get around this.

The following code at least proves that CTFE variables can be read at compile time and the limitation is with the internal implementation.

(this is easy to see, because on one hand we can't print s but on the other we can... hence the limitation with pragma is an artificial one.)

import std.stdio, std.cstream, std.conv;

mixin template a()
{
        template b()
        {
                static string c()
                {
                        
                        string s = "a"; s ~= "b";
                        string x = "pragma(msg, \""~s~"\");";
                        // pragma(msg, s) // fails
                        return x;
                }
                enum b = c();
        }
        mixin(b!());
}

int main(string[] argv)
{
mixin a!(); // can't pass a string to a in any way because of artificial ctfe limitation
        din.getc();
        return 0;
}

Reply via email to