Exception specifications: good or bad?

This is a discussion on Exception specifications: good or bad? within the C++ Programming forums, part of the General Programming Boards category; This is a (to me anyway) a very difficult topic, and there are arguments both for and against. The question, ...

Exception specifications: good or bad?

This is a (to me anyway) a very difficult topic, and there are arguments both for and against. The question, if the subject line wasn't clear, is this: should you use exception specifications, or shouldn't you?

On the bright side, exception specifications provide great documentation for users of your class: they know what exceptions they need to catch. On the downside, there's a huge problem when a function with an exception specification calls another function that can possibly throw exceptions other than in the specification.

For example (example courtesy of Effective C++), if we have two functions f1 and f2: