If function parameter type is a interface, parameter.classinfo returns inteface's ClassInfo instead of instance's ClassInfo. interface I {} class C : I {} class D : C {} void o(in Object obj) { writeln(obj.classinfo.name); } void i(in I obj) { writeln(obj.classinfo.name); } void c(in C obj) { writeln(obj.classinfo.name); } void main() { auto d = new D; o(d); // -> D i(d); // -> I, wrong c(d); // -> D } I suppose this behavior is a bug.
It is not related to function argument. This bug occured by interface reference. Sorry for rough information. interface I {} class C : I {} class D : C {} void main() { auto d = new D; C c = d; writeln(c.classinfo.name); I i = d; writeln(i.classinfo.name); Object o = d; writeln(o.classinfo.name); }
My friend noted that it is reasonable that interface.classinfo returns interface's classinfo for IUnknown or Interface to C++. It sound true so that I changed the issue as not important. I suggest that at least this spec should be documented. This behavior is very confusing, I suppose it is better to replace classinfo property from interface reference by other appropriate way.
Commit pushed to https://github.com/D-Programming-Language/d-programming-language.org https://github.com/D-Programming-Language/d-programming-language.org/commit/226de8cfbb07d25c498b5e2b7b794a65437b9ebc fix Issue 3265 - .classinfo for Interface-typed reference does not return instance's ClassInfo
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル