On 02.02.2016 19:06, Robert M. Münch wrote:
I have a very strange effect, I'm not sure what it is about:
Value: {}
WordV: Value {
Value* get() {}
}
BaseOperator: Value : {
}
This isn't valid D code at all, which makes it unnecessarily hard to
understand what you mean.
Now comes the code using this:
auto op = cast(BaseOperator)(Word.get());
if (op !is null) {...
If get() returns "Value*" it segfaults, if I change it to "Value" it
works. How can this be?
A Value* is a pointer to a class reference. Unless you're doing
something really funky with the pointer, casting it to a class type
doesn't make sense.
Casting between class types that have an inheritance relation, like
Value and BaseOperator, does make sense (upcat/downcast).
If anything, you should be casting between Value* and BaseOperator*
(both pointer types) if you want to do something with pointers.
But you very seldom need pointers to class references. Just return Value
from get, and cast to BaseOperator.