#include <iostream>
#include <exception>
#include <stdexcept>
using std::cout;
using std::endl;
void function(int n) {
try {
if (n == 0)
throw n;
if (n == 1)
throw std::overflow_error("Divide by zero exception");
if (n == 2)
throw 3.14;
if (n == 4)
throw 'z';
}
catch (int __n) {
cout << "catch n = " << __n << endl;
}
catch (double d) {
cout << "catch d = " << d << endl;
}
catch (...) {
cout << "catch (...) : ";
std::exception_ptr ep = std::current_exception();
cout << (ep ? ep.__cxa_exception_type()->name() : "null") << endl;
}
}
int main()
{
function(0);
function(1);
function(2);
function(4);
}
/*
run:
catch n = 0
catch (...) : St14overflow_error
catch d = 3.14
catch (...) : c
*/