HP aC++/HP C A.06.28 Programmer's Guide Integrity servers (769150-001, March 2014)
5 Using HP aC++ Templates
The following sections overview template processing and describe the instantiation coding methods
available to you.
• “Invoking Compile-Time Instantiation” (page 132)
• “Scope and Precedence” (page 132)
• “Template Processing” (page 132)
• “Explicit Instantiation” (page 133)
• “Command-Line Option Instantiation” (page 134)
• “Compile-Time Instantiation” (page 134)
• “Migrating from Automatic Instantiation to Compile-time Instantiation” (page 135)
• “C++ Template Tutorial” (page 136)
Invoking Compile-Time Instantiation
There are three methods of invoking compile-time instantiation:
• Explicit Instantiation (developer-directed)
• Command-Line Option Instantiation (developer-directed)
• Compile-Time Instantiation (default)
Scope and Precedence
Explicit instantiation provides instantiation for a particular template class or template function.
While command line options and the default compile-time instantiation provide instantiation at the
level of the translation unit.
If you use explicit instantiation in addition to command-line options or default instantiation, explicit
instantiation takes precedence.
For example, using the +inst_compiletime option requests instantiation of all used template
functions and all static data members and member functions of instantiated template classes within
a translation unit. Using explicit instantiation requests instantiation of all members of a particular
template class or a particular template function.
Template Processing
In HP aC++, compile-time instantiation is the default template instantiation mechanism. During
compile-time instantiation, the compiler instantiates every template entity it sees in a translation
unit provided it has the required template definition.
Following is the overview of template processing:During compile-time instantiation, the compiler
instantiates every template entity it sees in a translation unit provided it has the required template
definition
• The compiler places an instantiation in every .o file in which a template is used and its
definition is known. The linker arbitrarily chooses a .o file to satisfy an instantiation request.
Only the chosen instantiation appears in the a.out or .so file. Any redundant instantiations
in other .o files are ignored.
• No instantiation information is placed in object (.o) files. The linker is responsible for ignoring
duplicate instantiations.
• No .I files are created. All .o files are compiled only once.
132 Using HP aC++ Templates