On Tuesday, 26 March 2013 at 23:00:40 UTC, Timon Gehr wrote:
On 03/26/2013 10:28 PM, Joseph Cassman wrote:
I get these errors

aggregate.d(11): Error: variable aggregate.A.c!("y").c cannot use
template to add field to aggregate 'A'
aggregate.d(6): Error: template instance aggregate.A.c!("y") error
instantiating

from compiling the following code

struct A
{
    void b()
    {
        size_t y;
        mixin(c!("y"));
    }

    template c(string x)
    {
        const char[] c = "
            while(" ~ x ~ " < 100)
            {
                " ~ x ~ "++;
            }";
    }
}

I can only find bug 276
(http://d.puremagic.com/issues/show_bug.cgi?id=276) which seems related
but looks like it was fixed.

I am using dmd 2.062 on Ubuntu Linux 12.10.

Is this a bug? Or maybe bad code?


Bad code. Use enum for compile-time constants.

This will work:

struct A{
    void b(){
        size_t y;
        mixin(c!("y"));
    }

    template c(string x){
        enum c = "while(" ~ x ~ " < 100){" ~ x ~ "++;}";
    }
}

Perhaps you can enlighten me:

why does "const c" work if the template is outside the struct, but not if it's inside?

Also, why doesn't "string c" work even outside of the struct, seeing as it's value is completely defined at compile-time?

Reply via email to