Manipulación de excepciones elegante en OpenMP

OpenMP prohíbe el código que deja el bloque openmp por excepción. Por lo tanto, estoy buscando una buena forma de obtener las excepciones de un bloque openmp con el propósito de volver a generarlas en el hilo principal y manejarlas en un momento posterior. Hasta ahora, lo mejor que he podido encontrar es lo siguiente:

class ThreadException {
    std::exception_ptr Ptr;
    std::mutex         Lock;
public:
    ThreadException(): Ptr(nullptr) {}
    ~ThreadException(){ this->Rethrow(); }  
    void Rethrow(){
        if(this->Ptr) std::rethrow_exception(this->Ptr);
    }
    void CaptureException() { 
        std::unique_lock<std::mutex> guard(this->Lock);
        this->Ptr = std::current_exception(); 
    }   
};
//...
ThreadException except;
#pragma omp parallel
{
    try {
      //some possibly throwing code
    } 
    catch(...) { except.CaptureException(); }
}

Si bien esto funciona bien, volver a generar posibles excepciones de la sección paralela tan pronto comoThreadException&nbsp;objeto se destruye, esta construcción es todavía un poco difícil de usar para poner con unatry {}catch(...){}&nbsp;alrededor de cada sección y tener que capturar manualmente la excepción.

Entonces mi pregunta es: ¿Alguien sabe una manera más elegante (menos verbosa) de hacer esto (y si es así, cómo se ve)?