[Issue 1563] dynamic cast is not always performed
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Thu Nov  8 04:42:34 PST 2007
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=1563
smjg at iname.com changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |smjg at iname.com
------- Comment #4 from smjg at iname.com  2007-11-08 06:42 -------
(In reply to comment #3)
> is their any reson to cast somthing that isn't a C to type C? Only a few 
> reasons some to mind and I'm not shrue any of them should be allowed
It's the well-documented method of testing an object to see if it's of a
particular class.
http://www.digitalmars.com/d/expression.html#CastExpression
"In order to determine if an object o is an instance of a class B use a cast:
    if (cast(B) o)
    {
        // o is an instance of B
    }
    else
    {
        // o is not an instance of B
    }"
However, for this to work, o has to be declared as some superclass of B, not B
itself.  If the variable is declared as a B, then the compiler is within its
right to assume that the object is a B (or o is already null).
So it's reasonable that given
    C c;
then
    c = cast(C) c;
is a nop.  The problem is that, unless I've missed something, the behaviour of
casting a void* to class type is unspecified.
-- 
    
    
More information about the Digitalmars-d-bugs
mailing list