import core.stdc.stdio : printf;
extern (C++) abstract class A {
     void sayHello();
}
extern (C++) class B : A {
     override void sayHello() {
         printf("hello\n");
     }
}
extern (C) void main() {
     //scope b = new B;
     B b;
     assert(b);
     b.sayHello();
}
Above fails because b is null. But why doesn't the compiler say 
so? It seems like a very basic safety check.