On Friday, 8 March 2013 at 05:46:48 UTC, Rob T wrote:
That's very unfortunate, and should be corrected, because it means that you cannot easily catch multiple derived Exception types and rethrow the same derived type. Instead you have to explicitly catch all derived types and rethrow them individually, but that's simply not practical, so you end up catching only the base exception (Throwable?) and rethrow it, but you lose the derived type in the process.

--rt

Actually no.

class myException1 : Exception { this() { super("1"); } }
class myException2 : Exception { this() { super("2"); } }

void foo(bool val)
{
    if (val)
        throw new myException1;
    else
        throw new myException2;
}
void bar(bool val)
{
    try {
        foo(val);
    }
    catch (Exception e) {
        if (typeid(e) == typeid(myException1))
            throw e; // may be downcasted, if necessary
                     // to work with specific fields
    }
}


void main()
{
    try {
        bar(true);
    }
    catch (myException1 e) {}
    bar(false);
}

Reply via email to