
Peter Dimov wrote:
Note that N2179 doesn't require a copy to be made. If GCC allocates the exception objects on a heap - I have some recollections that it was doing that but I may be wrong - it might still be possible to implement current_exception to return a pointer to the active exception object... if there's a way to insert a reference count somewhere inside.
I took a larger stab at this, but I'm pretty much stumped right now. I can't abuse the reference count in __cxa_exception, because if I do, the handled exception stack won't be properly cleaned up. I can use current_exception() to get the currently handled exception. However, calling it again will yield a null pointer. That's because I can't abuse handlerCount properly. The exception_ptr works so far that it lets the exception escape the catch. I can use rethrow_exception() to rethrow the exception. However, when I catch it again, it won't escape the catch. I.e. ------------- class foo {}; int main() { exception_ptr p; try { throw foo(); } catch(foo &) { p = current_exception(); // Every subsequent current_exception() == 0 } try { rethrow_exception(p); } catch(foo &) { } // Exception is destroyed here! // p dangles here! } -------------- And that's a simple scenario ... Sebastian