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;
}

Reply via email to