[Issue 14612] typeid(interface) returns TypeInfo_Class object
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Mon Jul 20 23:45:33 PDT 2015
https://issues.dlang.org/show_bug.cgi?id=14612
--- Comment #5 from Kenji Hara <k.hara.pg at gmail.com> ---
(In reply to Rainer Schuetze from comment #4)
> cast(Object) creates a call into the runtime (_d_interface_cast) and is
> pretty expensive. It could be optimized to the series of indirections by the
> compiler, though.
Actually _d_interface_cast is not so high cost so Object has no base class and
implements no interfaces.
> I guess the current behaviour could be described as "typeid(I) evaluates to
> the most derived interface that is implemented by the object and that
> inherits from the static type."
>
> But "most derived" is not well defined when it comes to inheriting from
> multiple interfaces:
It would be visible when you consider the class object layout.
> interface I {}
> interface J : I {}
> interface K : I {}
> class E : J, K {}
// I I
// E : J, K
//===============
// ij ik
// | |
// j k
// | |
// e --[x]-[y]
[x] is the "most derived vptr slot of ij, and [y] is of ik.
--
More information about the Digitalmars-d-bugs
mailing list