Shouldn't casting an object to void* be considered @safe?
Andrej Mitrovic
andrej.mitrovich at gmail.com
Fri Dec 13 08:05:53 UTC 2019
I recently got to thinking about a code snippet. The following
doesn't compile, because casting to a void* is considered unsafe:
-----
import std.stdio;
class C
{
void foo() @safe
{
writeln("%s: C.foo()", cast(void*)this);
}
}
void main()
{
}
-----
> test.d(7): Error: cast from `test.C` to `void*` not allowed in
> safe code
However, I don't see this cast as being unsafe. Casting a class
object to a `void*` doesn't break the type system by itself. You
cannot assign a `void*` to any other pointer type without an
additional cast, and that additional cast would be the unsafe
one. Additionally, you cannot reference a `void*`, so as far as I
can see it's fairly safe to use in @safe code.
Wouldn't it make sense to allow casting reference types to
`void*` in @safe code? Are there edge-cases I haven't considered?
More information about the Digitalmars-d
mailing list