Да, если хочется падение (или исключение какое) ну воткни ты assert(obj!=NONE) и все.
И чем это будет отличаться от "null reference exception"? Кроме того, что но является дополнительной сущностью, требующей поддержки со стороны компилятора, рантайма и программиста
Равно как и искоренить ub у null'а в сях. Это ж не дело, когда оно долгое время с нулями как-то пашет, а потом внезапно на том же обращении к нулю падает.
Эффективность здорово просядет. Собственно даже в управляемых языках "null reference exception" возникает как результат трансляции аппартного исключения, а не софтварной проверки на NULL. А понятия "просто разименования" (*pointer) без доступа по такому указателю - там просто нет.