Bug in using string mixins inside of a struct?

Timon Gehr timon.gehr at gmx.ch
Tue Mar 26 16:00:39 PDT 2013


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 ~ "++;}";
     }
}



More information about the Digitalmars-d mailing list