Should this be a compiler error?

Jason House jason.james.house at gmail.com
Mon Jun 8 05:52:11 PDT 2009


Mike L. Wrote:

> The following code compiles fine for me with dmd 1.043:

At least for closures, D2 will catch this type of issue. I doubt such escaping stack frame issues will get addressed in D1. Either way, you should submit a bugzilla entry.




> 
> ----------
> module wtf;
> 
> version(Tango)
> 	import tango.io.Stdout;
> else
> 	import std.stdio;
> 
> interface Printer
> {
> 	void print();
> }
> 
> class WTF
> {
> 	Printer p;
> 	
> 	this(int x)
> 	{
> 		p = new class Printer
> 		{
> 			override void print()
> 			{
> 				version(Tango)
> 					Stdout(x).newline();
> 				else
> 					writefln(x);
> 			}
> 		};
> 	}
> }
> 
> void main()
> {
> 	WTF wtf = new WTF(42);
> 	wtf.p.print();
> }
> ----------
> 
> The anonymous class is given a method that prints the int x, however, by the time wtf.p.print() is called, x has gone out of scope. It's still possible to call the print(), though, and it just prints garbage. Should this be a compiler error?




More information about the Digitalmars-d mailing list