digitalmars.D.bugs - template bugs
- tetsuya (52/52) Dec 13 2004 win XP, dmd0109
- Thomas Kuehne (13/65) Dec 15 2004 -----BEGIN PGP SIGNED MESSAGE-----
- Walter (9/46) Mar 17 2005 Actually, this declares 'foo' to be an instance of template T!(). It's ...
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
<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
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
Dec 13 2004
-----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
<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
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-----
Dec 15 2004
"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 <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 saidfunctionmain Maybe the same bug with the previous one?I've got this fixed now. Thanks.
Mar 17 2005









Thomas Kuehne <thomas-dloop kuehne.thisisspam.cn> 