What the heck is wrong with CTFE's?

JS js.mdnq at gmail.com
Mon Jul 8 04:56:39 PDT 2013


The following code inserts properties for each type,

auto name = "Value"~((i == 0) ? "" : to!string(i++));

always as the i == 0 evaluate to true.


My question is, why the heck is it so hard to use basic 
programming structs inside CTFE's? I know that CTFE's have to 
work at run time also, so there is a limitation, but:

1. obviously ints work because the code below works with i as a 
counter but we can't do a simple compare on it... this seems like 
a bug.

2. foreach can be used but a simple for loop can't... makes no 
sense.

I know what the average response is going to be but hopefully 
someone will surprise me with some useful.



mixin template PropertyBuilder(T...)
{
	template _(TT...)
	{
		static string eval()
		{
			string s;
			pragma(msg, TT);
			int i = 0;
			foreach(t; TT)
			{
				auto name = "Value"~((i > 0) ? "" : to!string(i++));
				s = "@property "~t.stringof~" "~name~"();\n";
				s ~="@property "~t.stringof~" "~name~"("~t.stringof~" 
value);\n";
			}
			return s;
		}
		enum _ = eval();
		pragma(msg, _);
	}

	mixin("mixin(_!T);");
	
}

interface a(MT...)
{
	mixin PropertyBuilder!MT;
}


More information about the Digitalmars-d mailing list