This code should compile: class MyException : Exception { this() { super("An exception!"); } } void throwAway() { throw new MyException; } void cantthrow() nothrow { try throwAway(); catch(MyException me) assert(0); catch(Exception e) assert(0); } void main() { } It doesn't. Instead, you get this error: d.d(14): Error: function d.cantthrow 'cantthrow' is nothrow yet may throw If you remove catch(MyException e) and its body, then the program compiles. Given that the catch block that catches MyException cannot throw an exception of its own and that the catch block following it catches Exception (and therefore will catch all exceptions) and cannot throw an exception, the compiler should be able to clearly determine that no exception can escape cantthrow, but apparently, it can't.
DMD pull #145. https://github.com/D-Programming-Language/dmd/pull/145
https://github.com/D-Programming-Language/dmd/commit/1809f7b5baaf6bb34879f19f5ba75af5f997c920 https://github.com/D-Programming-Language/dmd/commit/d4e602c2e2d2516f2958a762073ea7f6c98914f6
AltStyle によって変換されたページ (->オリジナル) / アドレス: モード: デフォルト 音声ブラウザ ルビ付き 配色反転 文字拡大 モバイル