AutoReg::AutoReg( ITestInvoker* invoker, SourceLineInfo const& lineInfo, StringRef classOrMethod, NameAndTags const& nameAndTags ) noexcept {
     try {
         getMutableRegistryHub()
                 .registerTest(
                     makeTestCase(
                         invoker,
                         extractClassName( classOrMethod ),
                         nameAndTags.name,
                         nameAndTags.tags,
                         lineInfo));
     } catch (...) {
         // Do not throw when constructing global objects, instead register the exception to be processed later
         getMutableRegistryHub().registerStartupException();
     }
 }
    void AutoReg::registerTestCase( ITestCase* testCase,
                                    char const* classOrQualifiedMethodName,
                                    NameAndDesc const& nameAndDesc,
                                    SourceLineInfo const& lineInfo ) {

        getMutableRegistryHub().registerTest
            ( makeTestCase( testCase,
                            extractClassName( classOrQualifiedMethodName ),
                            nameAndDesc.name,
                            nameAndDesc.description,
                            lineInfo ) );
    }
 void AutoReg::registerTestCase( ITestCase* testCase, 
                                 const char* name, 
                                 const char* description,
                                 const SourceLineInfo& lineInfo ) {
     getMutableRegistryHub().registerTest( TestCaseInfo( testCase, name, description, lineInfo ) );
 }
 ReporterRegistrar( std::string const& name ) {
     getMutableRegistryHub().registerReporter( name, new ReporterFactory() );
 }