Consider the function process_record, which calls read, which in turn calls future_value, which throws an exception. Who catches it?
void process_record()
{
try
{
read();
}
catch (logic_error& e)
{
cout << "caught logic_error " << e.what() << "\n";
}
}