On Tuesday, 16 July 2013 at 04:37:33 UTC, Ali Çehreli wrote:
On 07/15/2013 08:43 PM, JS wrote:

> http://dpaste.dzfl.pl/7c8b0ba9
>
> Why the heck can't we use integers in ctfe's? There seems to
be no
> simple way to create a counter and this is one of the most
basic
> programming constructs to use.. yet with ctfe's it's
impossible.
>
> I'd like each variable in the nested structs to be
incremented properly.

I did not read the code but just from your description, the separate compilation model that D uses would preclude that. For example, compilation of a.d would not know anything about the counter that b.d has counted during its compilation.

Ali

Huh? what is a.d and b.d?

The template transforms a string into a D code string... which is then string mixed in. The counter and code generation have nothing to do with the result. A counter is needed in the generation of the code to generate enum like characteristics.

It does use recursion, and I could pass a variable that counts the number of elements but this too would probably not work due to D bitching about using ints.

I imagine one could hack D to make it's flawed CTFE system work, to some degree... like using strings:


template inc(string s)
{
    string _(string a)
        {
                if (a == "0") return "1";
                if (a == "1") return "2";
                if (a == "2") return "3";
                if (a == "3") return "4";
                return "0";
        }
        enum inc = _(s); pragma(msg, ":"~_(s));
}

which is a modulo 4 incrementer. So, CTFE's have the ability to count... but extremely short sighted that they don't. I imagine can write a whole template library using strings to emulate ints in ctfe's... what a shame though...

Reply via email to