Bug in using string mixins inside of a struct?

John Colvin john.loughran.colvin at gmail.com
Tue Mar 26 16:22:02 PDT 2013


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?


More information about the Digitalmars-d mailing list