Thread overview | |||||
---|---|---|---|---|---|
|
December 13, 2004 template bugs | ||||
---|---|---|---|---|
| ||||
win XP, dmd0109 I found some bugs in template. 1. unexpected compilation dot-missing template expression is compiled (ignored?) without causing any error. <code> import std.stdio; template T() { class T { static void foo() { writefln("Hello World"); } // not executed, though } } void main() { T!()foo; // missing *DOT* !! } </code> 2. lookup symbol error It gives a funny message # test.d(4): cannot implicitly convert expression this of type A to A <code> template T() { A a; class A { this() { T!().a = this; } } // line 4 } void main() { mixin T!(); } </code> It works if you change mixin to alias. 3. Fatal error: out of memory It causes a fatal error: out of memory, after dmd said # test.d(4): constructor test.main.T!().A.this cannot access frame of function main Maybe the same bug with the previous one? <code> template T() { A a; class A { this() { a = this; } } // line 4 } void main() { mixin T!(); } </code> cheers! -tetsuya |
December 15, 2004 Re: template bugs | ||||
---|---|---|---|---|
| ||||
Posted in reply to tetsuya | -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Added to DStress as http://svn.kuehne.cn/dstress/run/template_07.d http://svn.kuehne.cn/dstress/run/template_08.d http://svn.kuehne.cn/dstress/nocompile/template_09.d Thomas tetsuya schrieb am Mon, 13 Dec 2004 13:20:58 +0000 (UTC): > win XP, dmd0109 > > I found some bugs in template. > > > > 1. unexpected compilation > > dot-missing template expression is compiled (ignored?) > without causing any error. > ><code> > import std.stdio; > > template T() > { > class T > { > static void foo() { writefln("Hello World"); } // not executed, though > } > } > > void main() > { > T!()foo; // missing *DOT* !! > } ></code> > > > > 2. lookup symbol error > > It gives a funny message > # test.d(4): cannot implicitly convert expression this of type A to A > > ><code> > template T() > { > A a; > class A { this() { T!().a = this; } } // line 4 > } > > void main() > { > mixin T!(); > } ></code> > > It works if you change mixin to alias. > > > > 3. Fatal error: out of memory > > It causes a fatal error: out of memory, after dmd said > # test.d(4): constructor test.main.T!().A.this cannot access frame of function > main > Maybe the same bug with the previous one? > ><code> > template T() > { > A a; > class A { this() { a = this; } } // line 4 > } > > void main() > { > mixin T!(); > } ></code> > > > > cheers! > > -tetsuya > > -----BEGIN PGP SIGNATURE----- iD8DBQFBwHdZ3w+/yD4P9tIRAjWWAJ9lwjYtwg9iCAh3S4qLHv2y47GWDACePQVR ag2GYH13PsjbOQYWI2EqyU4= =Hph4 -----END PGP SIGNATURE----- |
March 18, 2005 Re: template bugs | ||||
---|---|---|---|---|
| ||||
Posted in reply to tetsuya | "tetsuya" <tetsuya_member@pathlink.com> wrote in message news:cpk4vq$1m5a$1@digitaldaemon.com... > 1. unexpected compilation > > dot-missing template expression is compiled (ignored?) > without causing any error. > > <code> > import std.stdio; > > template T() > { > class T > { > static void foo() { writefln("Hello World"); } // not executed, though > } > } > > void main() > { > T!()foo; // missing *DOT* !! > } > </code> Actually, this declares 'foo' to be an instance of template T!(). It's a feature, not a bug. > 2. lookup symbol error > > It gives a funny message > # test.d(4): cannot implicitly convert expression this of type A to A > > > <code> > template T() > { > A a; > class A { this() { T!().a = this; } } // line 4 > } > > void main() > { > mixin T!(); > } > </code> > > It works if you change mixin to alias. Although the error message is confusing, what's happening is that the T!().a is not referring to the mixin T!(), it is creating a new global instance of T. Hence, the mixin A is different from the instance A. > 3. Fatal error: out of memory > > It causes a fatal error: out of memory, after dmd said > # test.d(4): constructor test.main.T!().A.this cannot access frame of function > main > Maybe the same bug with the previous one? I've got this fixed now. Thanks. |
Copyright © 1999-2021 by the D Language Foundation