File indexing completed on 2024-04-06 12:13:11
0001 #ifndef FWCore_Utilities_ConvertException_h
0002 #define FWCore_Utilities_ConvertException_h
0003
0004 #include <string>
0005 #include <exception>
0006 #include <functional>
0007 #include "FWCore/Utilities/interface/Exception.h"
0008 #include "FWCore/Utilities/interface/thread_safety_macros.h"
0009
0010 namespace edm {
0011 namespace convertException {
0012 void badAllocToEDM();
0013 void stdToEDM(std::exception const& e);
0014 void stringToEDM(std::string& s);
0015 void charPtrToEDM(char const* c);
0016 void unknownToEDM();
0017
0018 template <typename F>
0019 auto wrap(F iFunc) -> decltype(iFunc()) {
0020
0021 CMS_SA_ALLOW try { return iFunc(); } catch (cms::Exception&) {
0022 throw;
0023 } catch (std::bad_alloc&) {
0024 convertException::badAllocToEDM();
0025 } catch (std::exception& e) {
0026 convertException::stdToEDM(e);
0027 } catch (std::string& s) {
0028 convertException::stringToEDM(s);
0029 } catch (char const* c) {
0030 convertException::charPtrToEDM(c);
0031 } catch (...) {
0032 convertException::unknownToEDM();
0033 }
0034
0035 typedef decltype(iFunc()) ReturnType;
0036 return ReturnType();
0037 }
0038 }
0039 }
0040
0041 #endif