virtual std::string translateActiveException() const { try { #ifdef __OBJC__ // In Objective-C try objective-c exceptions first @try { return tryTranslators(); } @catch (NSException *exception) { return Catch::toString( [exception description] ); } #else return tryTranslators(); #endif } catch (TestFailureException &) { throw; } catch (std::exception &ex) { return ex.what(); } catch (std::string &msg) { return msg; } catch (const char *msg) { return msg; } catch (...) { return "Unknown exception"; } }
virtual std::string translateActiveException () const { try { throw; } catch( std::exception& ex ) { return ex.what(); } catch( std::string& msg ) { return msg; } catch( const char* msg ) { return msg; } catch(...) { return tryTranslators( m_translators.begin() ); } }
std::string tryTranslators ( std::vector<IExceptionTranslator*>::const_iterator it ) const { if( it == m_translators.end() ) return "Unknown exception"; try { return (*it)->translate(); } catch(...) { return tryTranslators( it+1 ); } }