On Thursday, 6 March 2014 at 18:36:12 UTC, Dejan Lekic wrote:
Template mixins can't contain statements, only declarations,
because they
(template mixins) are a way to inject code into the context.
Therefore it makes sense to forbid statements, as they can't
appear in ANY
context.
If I side-step slightly, the compiler does not appear to have
difficulty coping:
import std.stdio;
import std.conv;
string codeString(string A, string B, int I)()
{
enum n = I*3;
return "writeln(\""~A~"\"); writeln(\""~B~"\");
writefln(\"%d\","~to!string(n)~");";
}
void foo()
{
mixin(codeString!("One", "Two", 1)());
writeln("Hello world");
}
void main()
{
foo();
}