
I would hope to save exceptions thrown from 3rd party libraries. An intrusive approach wouldn't work.
For boost::throw_exception to be able to register the exception type from 3rd party libraries, they must call boost::throw_exception.
No, they don't need to call throw_exception. Registration of an exception type can occur separately from the throw. For example, a user could register an exception thrown by a binary-only library.
Sure, but in this case registration wouldn't be automatic. I think that implementing clone() automatically at the time of the throw inside boost::throw_exception is the best approach, because the throw statement is guaranteed to see the complete type, which is required to define public no-throw copy constructor -- and this is exactly what we need to implement clone(). In this case boost::throw_exception would become more generic, in that it would not be just a mechanism for boost components to throw exceptions, but would also become a way for 3rd party code to throw exceptions such that they get automatic cloning, plus the data transporting functionality from boost::exception. -- Emil Dotchevski Reverge Studios, Inc. http://www.revergestudios.com/reblog/index.php?n=ReCode