On Tuesday, 26 March 2013 at 23:22:03 UTC, John Colvin wrote:
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?
Interesting. Didn't catch the difference a minute ago.
I am interested too in how and why they get treated differently.
Joseph