Why isn't polymorphic down-casts such as in the following pattern matching on sub-class class Base {} class Sub : Base {} @safe unittest { auto base = new Base(); if (auto sub = cast(Sub)base) { // use sub } } allowed in safe D?