VMS Help CXX, Qualifiers, /TEMPLATE_DEFINE *Conan The Librarian |
/TEMPLATE_DEFINE=(option,...) /NOTEMPLATE_DEFINE Controls compiler behavior pertaining to the instantiation of C++ templates. See "Using Templates" in the HP C++ User's Guide for OpenVMS Systems for details on how to instantiate templates using this qualifier. Note that you must specify a value for /TEMPLATE_DEFINE. Select only one of the following optional values to determine the template instantiation model: Option Usage ALL Instantiate all template entities declared or referenced in the compilation unit, including typedefs. For each fully instantiated template class, all its member functions and static data members are instantiated even if they were not used. Nonmember template functions are instantiated even if the only reference was a declaration. Instantiations are created with external linkage. Overrides /REPOSITORY at compile time. Instantiations are placed in the user's object file ALL_REPOSITORY Instantiate all templates declared or used in the source program and put the object code generated as separate object files in the repository. Instantiations caused by manual instantiation directives are also put in the repository. This is similar to /TEMPLATE_DEFINE=ALL except that explicit instantiations are also put in the repository, rather than than an external symbol being put in the main object file. This qualifier is useful for creating a pre-instantiation library. AUTOMATIC Directs the compiler to use the automatic instantiation model of C++ templates. /TEMPLATE_DEFINE=AUTOMATIC is the default. NOAUTOMATIC Directs the compiler to not implicitly instantiate templates. IMPLICIT_LOCAL Same as /TEMPLATE_DEFINE=LOCAL, except manually instantiated templates are placed in the repository with external linkage. This is useful for build systems that need to have explicit control of the template instantiation mechanism. This mode can suffer the same limitations as /TEMPLATE_ DEFINE=LOCAL. This mode is the default when /STANDARD=GNU is specified. LOCAL Similar to /TEMPLATE_DEFINE=USED except that the functions are given internal linkage. This qualifier provides a simple mechanism for getting started with templates. The compiler instantiates as local functions the functions used in each compilation unit, and the program links and runs correctly (barring problems resulting from multiple copies of local static variables). However, because many copies of the instantiated functions can be generated, this qualifier might not be not suitable for production use. The /TEMPLATE_DEFINE=LOCAL qualifier cannot be used in conjunction with automatic template instantiation. If automatic instantiation is enabled by default, it is disabled by the /TEMPLATE_DEFINE=LOCAL qualifier. Explicit use of /TEMPLATE_ DEFINE=LOCAL and /TEMPLATE_DEFINE=AUTO is an error. USED Instantiate those template entities that were used in the compilation. This includes all static data members for which there are template definitions. Overrides /TEMPLATE_ DEFINE=AUTO at compile time. USED_REPOSITORY Like ALL_REPOSITORY, but instantiates only templates used by the compilation. The explicit instantiations are also put into the repository as separate object files. The following /TEMPLATE_DEFINE optional values are independent of the model used and each other: Option Usage DEFINITION_FILE_ Specifies a string that contains a TYPE="file-type- list of file types that are valid for list" template definition files. Items in the list must be separated by commas and preceded by a period. A type is not allowed to exceed the OpenVMS limit of 31 characters. This qualifier is applicable only when automatic instantiation has been specified. The default is /TEMPLATE_ DEFINE=DEF=".CXX,.C,.CC,.CPP". PRAGMA Determines whether the compiler ignores #pragma define_template directives encountered during the compilation. This qualifier lets you quickly switch to automatic instantiation without having to remove all the pragma directives from your program's code base. The default is /TEMPLATE_DEFINE=PRAGMA, which enables #pragma define_template. VERBOSE Turns on verbose or verify mode to display each phase of instantiation as it occurs. During the compilation phase, informational level diagnostics are generated to indicate which templates are automatically being instantiated. This qualifier is useful as a debugging aid. TIMESTAMP (Alpha only applicable if a repository is being only) used. Causes the compiler to create a timestamp file named TIMESTAMP. in the repository. Thereafter, instantiations are added or regenerated only if needed; that is, if they do not alreay exist, or if existing ones are older than the timestamp. Also see /REPOSITORY. Also see /PENDING_INSTANTIATIONS.
|