
Robert Ramey:
What is an "implicit requirement"? You mean that previous users of boost/throw_exception where remiss if they didn't derive from std::exception
Yes, they were. This was often caused by silent bugs - throwing enums instead of the appropriate exception type, in one case.
or if they didn't surround throw_exception with #if BOOST_NO_TYPEID.
No, throw_exception is not supposed to be surrounded by #if BOOST_NO_TYPEID, and it would in any case be incorrect to do so. What it _is_ supposed to do is work and not cause problems for people unaware of Boost.Exception, and it will hopefully be fixed accordingly. For this to happen, Boost.Config needs to acquire a BOOST_NO_RTTI macro. Incidentally, g++ 4.3 now seems to have a predefined __GXX_RTTI macro that we can use to autodetect that BOOST_NO_TYPEID and BOOST_NO_RTTI need to be set (earlier g++ versions did not).
Hmmm - It looks to me that the previous code would work fine on a no-exeptions platform - all it did was call a user defined throw_exception function.
No, it would fail to compile. The user-defined function took an std::exception argument. A fundamental issue is that there are many configurations relevant to our users that we don't test. -Wshadow -Wundef is one, no-exceptions is another, no-RTTI is a third one. Speaking as a lib maintainer, I try to keep the libraries working under these conditions, but without test results, it's not easy to do so.