I think this is arguably not a bug in the same way that compile-time "?:" expressions evaluate both their arguments regardless of which is selected, but it's definately non-intuitive: C:\code\d\bugs>type 149_2.d import std.c.stdio; void main() { static if( int.mangleof.length > 1 && int.mangleof[1] == 'x' ) printf( "'x' as second char\n" ); } C:\code\d\bugs>dmd 149_2.d 149_2.d(5): array index [1] is outside array bounds [0 .. 1] C:\code\d\bugs>
Definitely a bug -- but maybe not in &&. This example compiles: void main() { const char [] s = int.mangleof; static if( s.length > 1 && s[1] == 'x' ) printf( "'x' as second char\n" ); } And this one gives a quite bizarre error message: void main() { const char [] s = (int*).mangleof; static if( s.length > 1 && s[2] == 'x' ) printf( "'x' as second char\n" ); } something about TOK58 doesn't evaluate to a boolean.
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 d-bugmail@puremagic.com schrieb am 2006年03月13日: > > And this one gives a quite bizarre error message: > > void main() > { > const char [] s = (int*).mangleof; > static if( s.length > 1 && s[2] == 'x' ) > printf( "'x' as second char\n" ); > } > > something about TOK58 doesn't evaluate to a boolean. The code above is buggy. s="ab" will result in an ArrayBoundsError. Added to DStress http://dstress.kuehne.cn/run/m/mangleof_15_A.d http://dstress.kuehne.cn/run/m/mangleof_15_B.d http://dstress.kuehne.cn/run/m/mangleof_15_C.d http://dstress.kuehne.cn/run/m/mangleof_15_D.d Thomas -----BEGIN PGP SIGNATURE----- iD8DBQFEH+AF3w+/yD4P9tIRAic1AKCSrOmy1GOb0Lsry6wfLQ2H7b/IFQCgvDT9 BPkzHqg8uz8ZkR+y3x+WD3g= =dpwQ -----END PGP SIGNATURE-----
Fixed 0.155
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル