Re: Proposal: A block between "try" and "catch".
On Jun 10, 10:24 am, Seungbeom Kim <musip...@bawi.org> wrote:
[ discussing potential notations for turning off exception catching... ]
To avoid these problems, a better syntax would be something that puts a
"try ends here" or "no catch from here" mark *inside* the try block.
For example:
try {
My_object obj;
default: // no catching from here
obj.foo();
obj.bar();
}
catch (My_exception& ex) {
// ...
}
Or another syntax could be a block inside, like this:
try {
My_object obj;
try void { // exceptions not caught
// "try void"? "void try"? "try = 0"? ...
obj.foo();
obj.bar();
}
obj.qux(); // exceptions caught
}
catch (My_exception& ex) {
// ...
}
These notations still affect all types of exceptions: if bothering to
make a change to address this issue at all, the solution might as well
permit more fine grained control. Further: how many surrounding try/
catch scopes should these notations implicitly throw past? Why limit
it to one? Having said that, simply giving a number would lead to
very fragile code (like some languages "break N" scopes) if those
scopes aren't within the function, as a function shouldn't have to be
aware of its callers. So, I still think a "goto" approach is a
reasonable compromise - yes any goto is ugly, but then it's clearly an
unusual situation already if the exception handling is this fiddly.
To extend my previous suggestion:
try { ... } throw goto X;
rethrows anything from label X
try { ... } catch (const T&) { throw goto X; } ...
rethrow the T from label X, other catch statements allowed in catch
list...
Regards,
Tony
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]