On Saturday, 1 May 2021 at 04:55:10 UTC, frame wrote:
I always thought as long as an object implements an interface, it should be able to cast it from a void* if it really points to a supporting object.
No. An interface is like a pointer to a pointer. So to get to the class, you have to go one more level of indirection.
```d import std.stdio; interface I { void doIt(); } class A : I { void doIt() { writeln("Doing it"); } } void main() { I i = new A; void** pi = cast(void**)i; A a = cast(A)(*pi); a.doIt(); } ```
If the runtime could not successfully cast it to AI, it should return null. Am I wrong here?
That only works when you're casting one class/interface reference to another. It doesn't work when you're casting raw pointers.