Actually DMD has the restriction, that a catch in not allowed within a finally block. A very simple workaround: try{ } catch( Exception e){ } finally( void block(){ try{ } catch( Exception e){ } } block(); } This is OK for the compiler. I don't know the reason for this restriction, but isn't it possible to get rid of it?