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

Reply via email to