The compiler does all template instantiations automatically, and makes sure there is only one definition of each template entity left after linking. The compiler does this by emitting template entities in named common sections. Therefore, all duplicate common sections, that is, common sections with the same name, are eliminated by the linker.
You can limit the number of concurrent instantiations of a
given template with the
See also --pending_instantiations=n for more information.
When implicit inclusion is enabled, the compiler assumes that
if it requires a definition to instantiate a template entity declared
.h file it can implicitly include the corresponding
to get the source code for the definition. For example, if a template
ABC::f is declared in file
and an instantiation of
ABC::f is required in
a compilation but no definition of
in the source code processed by the compilation, then the compiler
checks to see if a file
xyz.cc exists. If this
file exists, the compiler processes the file as if it were included
at the end of the main source file.
To find the template definition file for a given template
entity the compiler has to know the full path name of the file where
the template is declared and whether the file is included using
the system include syntax, for example,
This information is not available for preprocessed source containing
Consequently, the compiler does not attempt implicit inclusion for
source code containing
The compiler looks for the definition-file suffixes
You can turn implicit inclusion mode on or off with the command-line
Implicit inclusions are only performed during the normal compilation
of a file, that is, when not using the
See Compiler Command-line Options for more information.