Answer
You are catching std::exception (or another exception base class) by value. Catch by reference instead, to correctly catch instances of derived classes.
This code will print “Unknown exception” (Visual C++) or “std::exception” (GNU g++):
#include <stdexcept>
#include <iostream>
int main()
{
try
{
throw std::runtime_error("error message");
}
catch(std::exception e)
{
std::cout << e.what() << std::endl;
}
}
This code will correctly print “error message”:
#include <stdexcept>
#include <iostream>
int main()
{
try
{
throw std::runtime_error("error message");
}
catch(std::exception& e)
{
std::cout << e.what() << std::endl;
}
}
No comments:
Post a Comment