OK so if I am using a RAII idiom to manage some context attribute*, will it work as I expect if I use it nakedly in at the start of a try block? 
In other words, if I have this:
struct raii {
    raii() {
        std::cout << "Scope init"
                  << std::endl; }
    ~raii() {
        std::cout << "Scope exit"
                  << std::endl; }
};
… and I am successfully using it like this:
{
    raii do_the_raii_thing;
    stuff_expecting_raii_context();
    /* … */
}
… will the RAII instance work the same way if I do this:
try {
    raii do_the_raii_thing;
    stuff_expecting_raii_context_that_might_throw();
    /* … */
} catch (std::exception const&) {
    /* … */
}
This is probably a dumb question, but I want to check my own sanity on this – I am fuzzy on the subtleties of noexcept guarantees, and other exception-related minutiae – so pardon my naíveté
[*] for those curious, it’s the Python C-API’s nefarious GIL (global interpreter lock) that I am managing with RAII, in my specific case
 
     
     
     
    