#include <iostream>
#include <string>
#include <exception>
#include <typeinfo>
class MyException : public std::exception
{
public:
MyException()
: std::exception()
{}
};
void hereHappensTheFailure()
{
throw MyException();
}
template <class E>
void detector(const E& exception)
{
if (typeid(exception) != typeid(E))
{
std::cout << "Exception was sliced" << std::endl;
}
else
{
std::cout << "Exception was not sliced" << std::endl;
}
}
int main()
{
try
{
hereHappensTheFailure();
}
catch (std::exception ex)
{
detector(ex);
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8ZXhjZXB0aW9uPgojaW5jbHVkZSA8dHlwZWluZm8+CgpjbGFzcyBNeUV4Y2VwdGlvbiA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbgp7CnB1YmxpYzoKICBNeUV4Y2VwdGlvbigpCiAgICA6IHN0ZDo6ZXhjZXB0aW9uKCkKICB7fQp9OwoKdm9pZCBoZXJlSGFwcGVuc1RoZUZhaWx1cmUoKQp7CiB0aHJvdyBNeUV4Y2VwdGlvbigpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgRT4Kdm9pZCBkZXRlY3Rvcihjb25zdCBFJiBleGNlcHRpb24pIAp7CiAgaWYgKHR5cGVpZChleGNlcHRpb24pICE9IHR5cGVpZChFKSkgCiAgewogICAgc3RkOjpjb3V0IDw8ICJFeGNlcHRpb24gd2FzIHNsaWNlZCIgPDwgc3RkOjplbmRsOwogIH0KICBlbHNlCiAgewogICAgc3RkOjpjb3V0IDw8ICJFeGNlcHRpb24gd2FzIG5vdCBzbGljZWQiIDw8IHN0ZDo6ZW5kbDsKICB9Cn0KCmludCBtYWluKCkKewogIHRyeQogIHsKICAgIGhlcmVIYXBwZW5zVGhlRmFpbHVyZSgpOwogIH0KICBjYXRjaCAoc3RkOjpleGNlcHRpb24gZXgpCiAgewogICAgZGV0ZWN0b3IoZXgpOwogIH0KICAgIAogIHJldHVybiAwOwp9