Although they're not much use, there doesn't seem to be a compelling reason to disallow them. The spec gets shorter if they're allowed.
The compiler currently crashes, since at least 2.066. int ice6097a() { scope o = new Object(); return 1; } int ice6097b() { Object o; delete o; return 1; } static assert(ice6097a()); static assert(ice6097b()); At the very least they should not crash.
https://github.com/D-Programming-Language/dmd/pull/5310
Commits pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/bf995651b5a32592081ec1af70218e2a0427f862 fix Issue 6907 - ice(interpret.d) delete expressions crash interpreter Implement `delete` operation in CTFE. https://github.com/D-Programming-Language/dmd/commit/18ed97b49f5a4fceb09caf3801869875f1df9f03 Merge pull request #5310 from 9rnsr/fix6907 Issue 6907 - ice(interpret.d) delete expressions crash interpreter
Commits pushed to stable at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/bf995651b5a32592081ec1af70218e2a0427f862 fix Issue 6907 - ice(interpret.d) delete expressions crash interpreter https://github.com/D-Programming-Language/dmd/commit/18ed97b49f5a4fceb09caf3801869875f1df9f03 Merge pull request #5310 from 9rnsr/fix6907