Это вопрос дизайна языка:
Как вы думаете, недоступный код (на языках программирования в целом) должен вызывать предупреждение (т.е. "сообщить о проблеме и все равно скомпилировать") или ошибка («Отказаться от компиляции»)?
Лично я чувствую, что это должно быть ошибкой: если программист пишет кусок кода, он всегда должен быть выполнен с намерением запустить его в некотором сценарии. Но, например, компилятор C #, похоже, не согласен с этим и просто выдает предупреждение.
Примечание: я понимаю, что хорошее обнаружение мертвого кода - очень сложная проблема, но этот вопрос не в фокусе.
Вот несколько примеров фрагментов кода, в которых некоторые операторы явно недоступны:
return;
foo();
-
throw new Exception();
foo();
-
if (...) {
return;
} else {
throw new Exception();
}
foo();