Use class template as a type

Bauss via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Nov 30 01:42:46 PST 2016


On Tuesday, 29 November 2016 at 09:58:16 UTC, ag0aep6g wrote:
> On 11/29/2016 02:21 AM, Basile B. wrote:
>> The cast from a class type to a sub class in itself does 
>> absolutely
>> nothing.
>
> That can't be right. A bad downcast gives you null, so it has 
> to check the dynamic type information. Compare with upcasts 
> which are statically known to be correct, so they don't need to 
> check anything at runtime.

Usually casts to base classes can be determined if they're valid 
at compile-time.

Take this for an example:

class Foo {
}

class Bar : Foo {
}

void main() {
     auto bar = new Bar;

     auto foo = cast(Foo)bar; // The compiler should know that bar 
is of type Bar, which is a subclass of Foo and thus the cast 
theoretically is redundant.
}

Even in a situation like this, the compiler should be able to see 
if the cast could ever be invalid during compile-time determined 
by calls to fun.

void fun(Cast)(Bar bar) {
     return cast(Cast)bar; // If Cast is Foo then the compiler 
should know the cast is redundant.
]

I don't know if the D compiler actually takes such situation into 
account, but I'd assume it does some kind of optimization in 
regards of that.


More information about the Digitalmars-d-learn mailing list