
and AFAIK it's impossible to implement zero-overhead stack unwinding (you're the exception expert, so please correct me if I'm wrong). If by "zero-overhead stack unwinding" you mean exception handling that has no speed cost unless an exception is thrown, then consider yourself corrected.
This means that it is impossible to implement stack unwind with no speed cost when an exception is not thrown? I'm definitely not an expert, not even a newbie in this field probably, but I thought it was possible. Or did I misunderstood your statement?
I don't know anything about exception implementation, but I suppose that the code must mark some "check-points" to know how many object are already constructed, to know how many destructors it must call when the exception occurs. I suppose that can be implemented as an integer/pointer increment or assignment. But the code must add something to the normal path to know what to do when the exception occurs. Regards, Ion