Eliminate class allocators and deallocators?

Denis Koroskin 2korden at gmail.com
Thu Oct 8 05:31:00 PDT 2009


On Thu, 08 Oct 2009 15:48:56 +0400, Steven Schveighoffer  
<schveiguy at yahoo.com> wrote:

> On Thu, 08 Oct 2009 07:26:37 -0400, Denis Koroskin <2korden at gmail.com>  
> wrote:
>
>> On Thu, 08 Oct 2009 14:48:19 +0400, Steven Schveighoffer  
>> <schveiguy at yahoo.com> wrote:
>>
>>> On Wed, 07 Oct 2009 17:54:35 -0400, Denis Koroskin <2korden at gmail.com>  
>>> wrote:
>>>
>>>> On Wed, 07 Oct 2009 23:00:06 +0400, Sean Kelly  
>>>> <sean at 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).
>

No, IIRC, casting null to Object is perfectly valid and returns null.

But you are right, casting void* to Object does a reinterpret cast instead
of dynamic cast. I'm not sure if that's a good design decision, though.

> So I would say, the fact that compile time evaluation doesn't work is a  
> bug maybe?
>
> -Steve

Probably. Not only it doesn't work at compile time, it doesn't work at all!

void main()
{
     auto o = cast(Object)cast(void*)0; // Error: cannot cast void* to  
object.Object
}



More information about the Digitalmars-d mailing list