#include <iostream>
#include <stdexcept>

void inner() {
    throw std::runtime_error{"invalid"};
}

void outer() {
    std::cout << "outer before\n";
    inner();
    std::cout << "outer after\n";
}

int main() {
    try {
        outer();
    } catch (const std::runtime_error& error) {
        std::cout << "caught " << error.what() << '\n';
    }
    std::cout << "done\n";
}
