> The return types of functions need to be > reconsidered or honored if the function does nothing but throw an > exception. Function declarations should report that they throw the > exception so that an application written to them can catch these > run-time exceptions.
I'd like to have an alphabetical list of classes, with each method listed and the asserts or exceptions each method can throw. Such a list would be especially valuable in abstract classes if it listed the derived classes and the exceptions thrown in each (by method). I don't want it badly enough to make it up myself, so therefore it isn't very important...
There is a fundamental problem with explicit throw declarations; in my opinion the mechanism in C++ is broken. If you declare a member function and declare it like:
class foo {
bool IsValid() throw(std::bad_alloc);
}
And then you mod the code to also throw std::runtime_error you will automatically get an unhandled exception. It gets even worse...the throw decl's must be hierarchical. That means that your function *must* declare every exception it throws *and* every exception that any function it calls can throw, otherwise you get an unhandled exception. Absolutely horrible and useless, not to mention an upkeep nightmare.
I think that documenting throws in the header (a la doxygen semantics) is awesome and we endeavor to do so in all of our code. I would like to see that happen in Crypto (and a ton of other libs as well). However, I sincerely hope that no function throw declarations, except throw() in destructors, is implemented until the C++ spec is fixed (yeah, right).
my 2 pesos, for what they're worth.
michael
