Consider the following code: import std.stdio; class A { } class B : A { } void main() { A test=new B; writefln("Test is ", test.toString); A test_2=cast(A)(new B); writefln("Test 2 is ", test_2.toString); } What we would expect to see is "test7.B" twice. However, what we see is "test7.B" and "test7.A", which of course completely breaks polymorphism. The error doesn't appear on 1.005, so it was introduced either in '006 or '007. Greetings --downs
Judging by the disassembled code, it appears "cast(A)(new B)"is compiled as if it was "new A", it passes the ClassInfo for A instead of that for B to _d_newclass... By the way, the same thing happens in GDC[1], so it's most likely an error in the front-end. [1]: (gdc 0.23, using dmd 1.007), the x86-64 Linux binary from sourceforge.
Added to DStress as http://dstress.kuehne.cn/run/c/cast_34_A.d http://dstress.kuehne.cn/run/c/cast_34_B.d
Fixed in DMD-1.009
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル