In some cases, multiple exceptions require the exact same handling code in a catch block, but are not the only children of a common base class. class MyExceptionA : Exception {} class MyExceptionB : Exception {} class MyExceptionC : Exception {} void main() { try { trySomething(); } catch (e : MyExceptionA, MyExceptionB) { // handle A and B } catch (MyExceptionC e) { // handle C a different way } } This avoid the current messy solutions such as duplicating the bodies, using goto (does this even work?), moving the code to a function, or catching the base class and using typeinfo to choose.
https://github.com/D-Programming-Language/dmd/pull/738
Andrei has requested a variant of this (see pull request for details) that I'm not in favor of, so I'm going to unassign myself.
I'm going to close this as WONTFIX. The issue has been open for 8 1/2 year, and I think if a PR was raised for it today, it would create quite some controversy, with probably as much people in support as against. In other words, this is DIP material.