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.

I have the similar structure:


```d
interface AI {
    string doSomething();
}

template S() {
    void foo() {

    }
}

abstract class A : AI {
    string doSomething() {
        return "Hello, World";
    }
}

class B : A {
    mixin S;

    void other() {

    }
}

auto b = new B;
auto p = cast(void*) b;
auto c = cast(AI) p;

c.doSomething();
```

But in my code with the real object, this generates a RangeError, AcccesError, memory garbage:
```d
auto b = new B;
auto p = cast(void*) b;
auto c = cast(AI) p; // AI with corrupt data

c.doSomething(); // error
```

But this works:
```d
auto b = new B;
auto p = cast(void*) b;
auto c = cast(A) p; // A with correct data

c.doSomething(); // no error
```

If the runtime could not successfully cast it to AI, it should return null. Am I wrong here?

Reply via email to