digitalmars.D.bugs - static assert fouls up template promotion when between static if
- Don Clugston (19/19) Feb 22 2006 If you uncomment the indicated line, it won't compile.
- Sean Kelly (3/6) Feb 22 2006 They will? Awesome! I hadn't checked this recently.
- Nick (8/10) Feb 22 2006 If you're on linux, try compiling with eg. "make | head".
- Thomas Kuehne (20/39) Feb 23 2006 -----BEGIN PGP SIGNED MESSAGE-----
If you uncomment the indicated line, it won't compile.
(The fact that the others will compile is a really nice feature from DMD
0.146).
Note that a failed template promotion can easily send the compiler into
an error message orgy, which you unfortunately can't break out of with ^C.
template cat()
{
static assert(1); // OK
static if (1) {
// static assert(1); // doesn't work
static if (1) {
static assert(1); // OK
const int cat = 3;
}
}
}
void main() {
const int a = cat!();
}
Feb 22 2006
Don Clugston wrote:If you uncomment the indicated line, it won't compile. (The fact that the others will compile is a really nice feature from DMD 0.146).They will? Awesome! I hadn't checked this recently. Sean
Feb 22 2006
In article <dthlsr$1t9a$1 digitaldaemon.com>, Don Clugston says...Note that a failed template promotion can easily send the compiler into an error message orgy, which you unfortunately can't break out of with ^C.If you're on linux, try compiling with eg. "make | head". Sorta OT, but I think the error message orgy itself should be treated as a bug. If the compiler fails to instantiate a template, it continues to compile the entire program but fails with _every_ template. This leads to tons of unrelated and bogus error messages like "template instance cannot resolve forward reference". Nick
Feb 22 2006
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Don Clugston schrieb am 2006-02-22:
If you uncomment the indicated line, it won't compile.
(The fact that the others will compile is a really nice feature from DMD
0.146).
Note that a failed template promotion can easily send the compiler into
an error message orgy, which you unfortunately can't break out of with ^C.
template cat()
{
static assert(1); // OK
static if (1) {
// static assert(1); // doesn't work
static if (1) {
static assert(1); // OK
const int cat = 3;
}
}
}
void main() {
const int a = cat!();
}
Added to DStress as
http://dstress.kuehne.cn/compile/a/assert_14_A.d
http://dstress.kuehne.cn/nocompile/a/assert_14_B.d
http://dstress.kuehne.cn/nocompile/a/assert_14_C.d
http://dstress.kuehne.cn/compile/a/assert_14_D.d
http://dstress.kuehne.cn/compile/a/assert_14_E.d
http://dstress.kuehne.cn/nocompile/a/assert_14_F.d
http://dstress.kuehne.cn/compile/a/assert_14_G.d
http://dstress.kuehne.cn/nocompile/a/assert_14_H.d
http://dstress.kuehne.cn/nocompile/a/assert_14_I.d
http://dstress.kuehne.cn/compile/a/assert_14_J.d
Thomas
-----BEGIN PGP SIGNATURE-----
iD8DBQFD/iCQ3w+/yD4P9tIRAnRSAJ9qx5QvutmlpjFg3Vvh3vJHe1jEyQCfVkxU
BI5DyF8FOY89q6VS4GO3w1o=
=JTHS
-----END PGP SIGNATURE-----
Feb 23 2006









Sean Kelly <sean f4.ca> 