#include <iostream>
struct A{
};
struct B : A{
};
void
func(){
try{
throw A();
}
catch (B) { std::cout << "throw B" << std::endl; } // if B is a public base class of A
catch (B&) { std::cout << "throw B&" << std::endl; }
catch (B const&) { std::cout << "throw B const&" << std::endl; }
catch (B volatile&) { std::cout << "throw B volatile&" << std::endl; }
catch (B const volatile&) { std::cout << "throw B const volatile&" << std::endl; }
// catch (A) { std::cout << "throw A" << std::endl; }
catch (A&) { std::cout << "throw A&" << std::endl; }
catch (A const&) { std::cout << "throw A const&" << std::endl; }
catch (A volatile&) { std::cout << "throw A volatile&" << std::endl; }
catch (A const volatile&) { std::cout << "throw const volatile&" << std::endl; }
catch (void*) { std::cout << "throw void*" << std::endl; } // if A is a pointer
catch (...) { std::cout << "throw ..." << std::endl; }
}
int
main(){
func();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEF7CiAgICAKfTsKCnN0cnVjdCBCIDogQXsKCQp9OwoKdm9pZApmdW5jKCl7Cgl0cnl7CgkJdGhyb3cgQSgpOwoJfQoJY2F0Y2ggKEIpIHsgc3RkOjpjb3V0IDw8ICJ0aHJvdyBCIiA8PCBzdGQ6OmVuZGw7IH0gLy8gaWYgQiBpcyBhIHB1YmxpYyBiYXNlIGNsYXNzIG9mIEEKCWNhdGNoIChCJikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEImIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChCIGNvbnN0JikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEIgY29uc3QmIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChCIHZvbGF0aWxlJikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEIgdm9sYXRpbGUmIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChCIGNvbnN0IHZvbGF0aWxlJikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEIgY29uc3Qgdm9sYXRpbGUmIiA8PCBzdGQ6OmVuZGw7IH0KLy8JY2F0Y2ggKEEpIHsgc3RkOjpjb3V0IDw8ICJ0aHJvdyBBIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChBJikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEEmIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChBIGNvbnN0JikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEEgY29uc3QmIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChBIHZvbGF0aWxlJikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEEgdm9sYXRpbGUmIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChBIGNvbnN0IHZvbGF0aWxlJikgeyBzdGQ6OmNvdXQgPDwgInRocm93IGNvbnN0IHZvbGF0aWxlJiIgPDwgc3RkOjplbmRsOyB9CgljYXRjaCAodm9pZCopIHsgc3RkOjpjb3V0IDw8ICJ0aHJvdyB2b2lkKiIgPDwgc3RkOjplbmRsOyB9IC8vIGlmIEEgaXMgYSBwb2ludGVyCgljYXRjaCAoLi4uKSB7IHN0ZDo6Y291dCA8PCAidGhyb3cgLi4uIiA8PCBzdGQ6OmVuZGw7IH0KfQoKaW50Cm1haW4oKXsKCWZ1bmMoKTsKCXJldHVybiAwOwp9