For the record, nothing about exceptions in the C++ standard or common implementation methods
interferes with inlining. In practice, the body of an inlined function is just merged into
the body of whatever non-inline function it's expanded in.
The only place where exceptions interfere with optimization is in that the state of a function
context at a call site must be discoverable by the stack unwinder, so it can know which
objects' destructors have to run. In practice this means that calls in short-circuited
expressions, e.g. "if (a() && b()) ...", sometimes also set a flag: "if (a() && ((_f=1),b()))
...". This only happens if b() returns an object with a destructor, i.e. rarely.