Class MarkTemplateInstantiationsForOutput#
Defined in File markTemplateInstantiationsForOutput.h
Class Documentation#
-
class MarkTemplateInstantiationsForOutput#
Class implementing template instantiation details in Sage III.
Note that template declarations are instantiated to form template instantiations and ROSE will always output the instantiation as a specialization. Such instantiations are not marked as specializations. Only templates instantiations that were explicitly represented as specializations in the original source code are makred as specializations.
Template instantiations generated in either the prelink phase or as part of the initial compilation should be marked as compiler generated since they have no source position. The exception is that any specialized template instantiation should not be marked as compiler generated.
\implementation We have to output the declaration of the specialization after the template declaration and before it’s first use in the source file. It is an error to transform the specialization in a file where it is not first used (e.g. if the first use appears in a header file then the first use could appear before the declaration). Note also that only those template specializations that are transformed are output by ROSE.
Public Static Functions
-
static std::set<SgDeclarationStatement*> BuildSetOfRequiredTemplateDeclarations(SgNode *node, SgSourceFile *file)#
-
static void ProcessClassTemplateDeclarations(std::set<SgDeclarationStatement*> setOfRequiredDeclarations, SgSourceFile *file)#
-
static void ProcessFunctionTemplateDeclarations(std::set<SgDeclarationStatement*> setOfRequiredDeclarations, SgSourceFile *file)#
-
static void ProcessMemberFunctionTemplateDeclarations(std::set<SgDeclarationStatement*> setOfRequiredDeclarations, SgSourceFile *file)#
-
static std::set<SgDeclarationStatement*> BuildSetOfRequiredTemplateDeclarations(SgNode *node, SgSourceFile *file)#