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.

Reply via email to