Go to the documentation of this file.00001 #include "DataFormats/PatCandidates/interface/UserData.h"
00002
00003 #include <FWCore/Utilities/interface/TypeID.h>
00004 #include <FWCore/Utilities/interface/EDMException.h>
00005
00006 void pat::UserData::checkDictionaries(const std::type_info &type) {
00007 edm::TypeID edmType(type);
00008 if (!edmType.hasDictionary()) {
00009 int status = 0;
00010 char * demangled = abi::__cxa_demangle(type.name(), 0, 0, &status);
00011 std::string typeName(status == 0 ? demangled : type.name());
00012 if ((demangled != 0) && (status == 0)) free(demangled);
00013 throw edm::Exception(edm::errors::DictionaryNotFound)
00014 << " No REFLEX data dictionary found for the following class:\n\t"
00015 << typeName
00016 << "\n Most likely the dictionary was never generated,\n"
00017 << " but it may be that it was generated in the wrong package.\n"
00018 << " Please add (or move) the specification\n"
00019 << "\t<class name=\"" << typeName << "\" />\n"
00020 << " to the appropriate classes_def.xml file.\n"
00021 << " If the class is a template instance, you may need\n"
00022 << " to define a dummy variable of this type in classes.h.\n"
00023 << " Also, if this class has any transient members,\n"
00024 << " you need to specify them in classes_def.xml.\n";
00025 }
00026 }