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