When to throw Your functions should offer one of the following: Basic Guarantee Resources are not leaked Objects are still usable if not predictable Strong Guarantee Program state is as before the call Nothrow The function will never throw