Thread overview | ||||||
---|---|---|---|---|---|---|
|
May 02, 2004 Internal error with templates | ||||
---|---|---|---|---|
| ||||
I was trying to figure out how to use templates with alias parameters and i wasn't able to figure it out, but i got this internal error Internal error: ..\ztc\out.c 1127 with this code: import std.stream; import std.c.stdio; alias std.stream.stdout stdout; template Foo(alias T) { void Foo() { stdout.writeLine(T); } } int main ( char [] [] args ) { char[] x = "hello"; alias Foo!(x) fooinst; Foo!(x)(); return 1; } |
May 03, 2004 Re: Internal error with templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ivan Senji | In this code: <CODE> import std.stream; import std.c.stdio; alias std.stream.stdout stdout; template Foo(alias T) { void Foo() { stdout.writeLine(toString(T)); } } int main ( char [] [] args ) { static char[] x = "hello"; static char[] z = "world"; static int y=100; alias Foo!(x) foox; alias Foo!(y) fooy; Foo!(x)(); Foo!(y)(); Foo!(z)(); foox(); fooy(); return 1; } </CODE> I get "Internal error: ..\ztc\out.c 1127" if instead of "static int y=100;" i write "int y=100;" But i don't understand the behaviour of the above code! Why does this code print "hello" five times? I expected it to print: hello 100 world hello 100 What am i missing? "Ivan Senji" <ivan.senji@public.srce.hr> wrote in message news:c73l45$2df6$1@digitaldaemon.com... > I was trying to figure out how to use templates with alias parameters and i wasn't able to figure it out, but i got this internal error > > Internal error: ..\ztc\out.c 1127 > > with this code: > > import std.stream; > import std.c.stdio; > > alias std.stream.stdout stdout; > > template Foo(alias T) > { > void Foo() > { > stdout.writeLine(T); > } > } > > int main ( char [] [] args ) > { > char[] x = "hello"; > > alias Foo!(x) fooinst; > Foo!(x)(); > > return 1; > } > > > > |
May 05, 2004 Re: Internal error with templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ivan Senji | Ivan Senji wrote: [snip code] > I get "Internal error: ..\ztc\out.c 1127" > if instead of "static int y=100;" i write "int y=100;" I don't get an error, but the assignment doesn't happen without the static keyword. I am one version behind on dmd and I think I am up to date with dgc, both running on linux. > But i don't understand the behaviour of the above code! > Why does this code print "hello" five times? > I expected it to print: > hello > 100 > world > hello > 100 This is what I get with both dmd and dgc using your code. When I drop the 'static' keyword from the int declaration, '100' is replaced by '0'. Then if I do a seperate assignment, that works either way. i.e. <CODE> ... int y; y=100; ... </CODE> works as expected. > What am i missing? I am not sure. [remainder snipped] Cheers, Craig |
May 05, 2004 Re: Internal error with templates | ||||
---|---|---|---|---|
| ||||
Posted in reply to Craig Pennington | "Craig Pennington" <cpenning@milo.org> wrote in message news:c7ak76$pst$1@digitaldaemon.com... > Ivan Senji wrote: > [snip code] > > I get "Internal error: ..\ztc\out.c 1127" > > if instead of "static int y=100;" i write "int y=100;" > > I don't get an error, but the assignment doesn't happen without the static keyword. I am one version behind on dmd and I think I am up to date with dgc, both running on linux. Then it is probbably a 0.86 bug, Walter fixed it! > > But i don't understand the behaviour of the above code! > > Why does this code print "hello" five times? > > > I expected it to print: > > hello > > 100 > > world > > hello > > 100 > > This is what I get with both dmd and dgc using your code. When I drop the 'static' keyword from the int declaration, '100' is replaced by '0'. Then if I do a seperate assignment, that works either way. i.e. > > <CODE> > ... > int y; > > > y=100; > ... > </CODE> > > works as expected. What does it print when you run it? All i get is: hello hello hello hello hello > > What am i missing? > > I am not sure. > [remainder snipped] > > Cheers, > Craig |
Copyright © 1999-2021 by the D Language Foundation