On Thu, 08 Oct 2009 07:26:37 -0400, Denis Koroskin <2kor...@gmail.com>
wrote:
On Thu, 08 Oct 2009 14:48:19 +0400, Steven Schveighoffer
<schvei...@yahoo.com> wrote:
On Wed, 07 Oct 2009 17:54:35 -0400, Denis Koroskin <2kor...@gmail.com>
wrote:
On Wed, 07 Oct 2009 23:00:06 +0400, Sean Kelly
<s...@invisibleduck.org> wrote:
auto x = cast(MyClass) malloc(MyClass.classinfo.init.length);
I would expect a dynamic cast to occur at this line. Which will either
result in an access violation (since you are trying to cast a garbage
to an object) or result in a null being returned.
malloc returns void *, so no dynamic cast.
-Steve
I know malloc returns void*. I didn't know you can hijack type system
that easily.
But then, if no dynamic cast takes place why cast(Object)cast(void*)0
cannot be evaluated at compile time?
Your message made me test it :)
import std.stdio;
void *foo()
{
return cast(void*)0;
}
void main()
{
auto o = cast(Object)foo();
writefln("here!");
o.opEquals(o);
}
outputs:
here!
Segmentation fault
So, no dynamic cast (dynamic cast would have looked at the classinfo of
null, segfaulting before the output).
So I would say, the fact that compile time evaluation doesn't work is a
bug maybe?
-Steve