Now we can only catch by class that is derived from Throwable. This prevents logical generic *grouping* and catching by *group*. As discussed in #d on freenode irc from 24-05-2012 13:20:00 to 24-05-2012 13:56:00. For example: // assume that IThrowable is in druntime interface IMyException1: IThrowable {} interface IMyException2: IThrowable {} interface IMyException3: IThrowable {} class MyException1: Exception, IMyException1 {} class MyException2: Exception, IMyException1, IMyException2 {} class MyException3: Exception, IMyException1 ,IMyException3 {} class MyException4: Exception, IMyException3 {} try { throw new MyException2(); } catch (IMyException3) { // catches MyException3 or MyException4 }
Closing as WONTFIX. Rationale: This is an enhancement request, but there doesn't seem to be much interest in it, and the rationale is limited. Proper exception hierarchy is something that is often theorized but very rare in practice, and D is no exception (pun intended). If you strongly feel like we should pursue this, feel free to open an DIP: https://github.com/dlang/DIPs