Thread overview
Cast class reference to pointer of another class?
May 29
JN
May 29
JN
May 29
ag0aep6g
1 day ago
JN
1 day ago
Paul Backus
1 day ago
Imperatorn
May 29
{
}

class Bar
{
}

void main()
{
    Bar b = new Bar();
    Foo* f = cast(Foo*)b;
}```

this code compiles. Why? What is even the result in "f" in this case?
May 29

fixed formatting:

struct Foo
{
}

class Bar
{
}

void main()
{
    Bar b = new Bar();
    Foo* f = cast(Foo*)b;
}
May 29

On Saturday, 29 May 2021 at 21:01:14 UTC, JN wrote:

>

this code compiles. Why? What is even the result in "f" in this case?

On Saturday, 29 May 2021 at 21:03:12 UTC, JN wrote:

>

fixed formatting:

struct Foo
{
}

class Bar
{
}

void main()
{
    Bar b = new Bar();
    Foo* f = cast(Foo*)b;
}

You're writing @system code, so dangerous casts are allowed. It's no surprise that the code compiles. If you want to be safeguarded against such things, use @safe.

The result is a class object being reinterpreted as a struct object. Usually, that's just nonsense. But it might be useful for some expert who wants to tinker with the object's internals.

1 day ago

On Saturday, 29 May 2021 at 22:26:48 UTC, ag0aep6g wrote:

>

You're writing @system code, so dangerous casts are allowed. It's no surprise that the code compiles. If you want to be safeguarded against such things, use @safe.

The result is a class object being reinterpreted as a struct object. Usually, that's just nonsense. But it might be useful for some expert who wants to tinker with the object's internals.

I have to disagree. I don't see a good reason for this behavior and it's just one more thing to trip people. I think it'd be better if such thing was done explicit, something like:

Bar b = new Bar();
Foo* f2 = cast(Foo*)b.ptr;
1 day ago

On Thursday, 10 June 2021 at 21:25:35 UTC, JN wrote:

>

I have to disagree. I don't see a good reason for this behavior and it's just one more thing to trip people. I think it'd be better if such thing was done explicit, something like:

Bar b = new Bar();
Foo* f2 = cast(Foo*)b.ptr;

Isn't having to write out cast(Foo*) already pretty explicit?

1 day ago

On Thursday, 10 June 2021 at 23:47:33 UTC, Paul Backus wrote:

>

On Thursday, 10 June 2021 at 21:25:35 UTC, JN wrote:

>

I have to disagree. I don't see a good reason for this behavior and it's just one more thing to trip people. I think it'd be better if such thing was done explicit, something like:

Bar b = new Bar();
Foo* f2 = cast(Foo*)b.ptr;

Isn't having to write out cast(Foo*) already pretty explicit?

^