Consider: try { ... } catch (Exception) { ... } catch (StdioException) { ... } The second handler never matches because StdioException is a subclass of Exception, so the first handler will always match whatever the second matches. Should that be a compile-time error? I think so. Andrei