On 07/14/2017 12:36 PM, ANtlord wrote: > Hello! I've tried to use nothrow keyword and I couldn't get a state of > function satisfied the keyword. I have one more method that can throw an > exception; it is called inside nothrow method. Every type of an > exception from the throwable method is handled by the nothow method. > > ubyte throwable_fn(ubyte state) { > if(state < 2) { > return 1; > } else if(state == 3) { > throw new MyException1("qwe"); > } else { > throw new MyException2("asd"); > } > }
Although it's obvious to us that there are only those two exceptions, the compiler cannot in general know that.
> void nothrowable_fn() nothrow { > try { > auto val = throwable_fn(3); > // do success staff > } catch(MyException1 e) { > // handle error 1 > } catch(MyException2 e) { > // handle error 2 > } All you need is to catch Exception there as well: catch(Exception) { assert(false, "throwable_fn threw something unexpected"); } Ali