#include #include using namespace std; void Fun1(int i); int main() { int i; for(i =0; i < 6; i++ ) { cout << "Before the try-catch block, i = " << i << endl; try { Fun1(i); } catch (string & e) { cout << "string: " << e << endl; } catch ( invalid_argument & e) { cout << "invalid_argument: " << e.what() << endl; } catch ( out_of_range & e) { cout << "out_of_range: " << e.what() << endl; } catch (runtime_error & e) { cout << "runtime_error: " << e.what() << endl; } catch (exception & e) { cout << "exception: " << e.what() << endl; } catch (...) { cout << "Default catch." << endl; } cout << "outside of try-catch block " << endl; cout << endl << endl; } return 0; } void Fun1(int i) { cout << "Starting Fun1 i = " << i << endl; switch(i) { case 0: cout << "Throwing invalid_argument" << endl; throw invalid_argument ("You can't pass a 0"); break; case 1: cout << "Throwing out_of_range" << endl; throw out_of_range ("One is too low"); break; case 2: cout << "Throwing domain_error" << endl; throw domain_error("You should not pass a 2"); break; case 3: cout << "Throwing range error(runtime_error subclass)" << endl; throw range_error("3 was received"); break; case 4: cout << "Throwing bad_array_new_length (bad_alloc subclass)" << endl; throw bad_array_new_length(); break; case 5: cout << "Throwing an int (7) " << endl; throw int {7}; break; } cout << "Ending Fun1" << endl; return; }