Thread overview
Internal error with templates
May 02, 2004
Ivan Senji
May 03, 2004
Ivan Senji
May 05, 2004
Craig Pennington
May 05, 2004
Ivan Senji
May 02, 2004
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
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
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
"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