1. Exceptions as commonly implemented in C++ have high overhead in the exception path. But that's just an implementation strategy. There is no reason why it wouldn't be possible to generate exactly the same code as for an optional type if desired (and in fact it was proposed for c++ cf. Herbceptions).
2. So do returns, but we have long settled that SESE is undesirable.
2. So do returns, but we have long settled that SESE is undesirable.