#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEF7CiAgICAKfTsKCnN0cnVjdCBCIDogQXsKCQp9OwoKdm9pZApmdW5jKCl7Cgl0cnl7CgkJdGhyb3cgQSgpOwoJfQoJY2F0Y2ggKEIpIHsgc3RkOjpjb3V0IDw8ICJ0aHJvdyBCIiA8PCBzdGQ6OmVuZGw7IH0gLy8gaWYgQiBpcyBhIHB1YmxpYyBiYXNlIGNsYXNzIG9mIEEKCWNhdGNoIChCJikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEImIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChCIGNvbnN0JikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEIgY29uc3QmIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChCIHZvbGF0aWxlJikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEIgdm9sYXRpbGUmIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChCIGNvbnN0IHZvbGF0aWxlJikgeyBzdGQ6OmNvdXQgPDwgInRocm93IEIgY29uc3Qgdm9sYXRpbGUmIiA8PCBzdGQ6OmVuZGw7IH0KCWNhdGNoIChBKSB7IHN0ZDo6Y291dCA8PCAidGhyb3cgQSIgPDwgc3RkOjplbmRsOyB9CgljYXRjaCAoQSYpIHsgc3RkOjpjb3V0IDw8ICJ0aHJvdyBBJiIgPDwgc3RkOjplbmRsOyB9CgljYXRjaCAoQSBjb25zdCYpIHsgc3RkOjpjb3V0IDw8ICJ0aHJvdyBBIGNvbnN0JiIgPDwgc3RkOjplbmRsOyB9CgljYXRjaCAoQSB2b2xhdGlsZSYpIHsgc3RkOjpjb3V0IDw8ICJ0aHJvdyBBIHZvbGF0aWxlJiIgPDwgc3RkOjplbmRsOyB9CgljYXRjaCAoQSBjb25zdCB2b2xhdGlsZSYpIHsgc3RkOjpjb3V0IDw8ICJ0aHJvdyBjb25zdCB2b2xhdGlsZSYiIDw8IHN0ZDo6ZW5kbDsgfQoJY2F0Y2ggKHZvaWQqKSB7IHN0ZDo6Y291dCA8PCAidGhyb3cgdm9pZCoiIDw8IHN0ZDo6ZW5kbDsgfSAvLyBpZiBBIGlzIGEgcG9pbnRlcgoJY2F0Y2ggKC4uLikgeyBzdGQ6OmNvdXQgPDwgInRocm93IC4uLiIgPDwgc3RkOjplbmRsOyB9Cn0KCmludAptYWluKCl7CglmdW5jKCk7CglyZXR1cm4gMDsKfQo=