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

Reply via email to